Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Transact-SQL neposkytuje žádnou specializovanou syntaxi pro INSERT, UPDATEani příkazy DELETE při úpravě dat ve sloupcích definovaném uživatelem (UDT). Funkce Transact-SQL CAST nebo CONVERT slouží k přetypování nativních datových typů na typ UDT.
Vložení dat do sloupce UDT
Následující příkazy Transact-SQL vloží do tabulky Points tři řádky ukázkových dat. Datový typ Point se skládá z celočíselné hodnoty X a Y, které jsou vystaveny jako vlastnosti UDT. K přetypování hodnot X a Y oddělených čárkami na typ Point je nutné použít funkci CAST nebo CONVERT. První dva příkazy používají funkci CONVERT k převodu řetězcové hodnoty na typ Point a třetí příkaz používá funkci CAST:
INSERT INTO dbo.Points (PointValue)
VALUES (CONVERT (Point, '3,4'));
INSERT INTO dbo.Points (PointValue)
VALUES (CONVERT (Point, '1,5'));
INSERT INTO dbo.Points (PointValue)
VALUES (CAST ('1,99' AS Point));
Výběr dat
Následující příkaz SELECT vybere binární hodnotu UDT.
SELECT ID, PointValue
FROM dbo.Points;
Pokud chcete zobrazit výstup zobrazený ve čitelném formátu, zavolejte ToString metodu Point UDT, která převede hodnotu na řetězcové vyjádření.
SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points;
Tady je sada výsledků.
ID PointValue
-- ----------
1 3,4
2 1,5
3 1,99
K dosažení stejných výsledků můžete použít také Transact-SQL CAST a CONVERT funkce.
SELECT ID, CAST (PointValue AS VARCHAR)
FROM dbo.Points;
SELECT ID, CONVERT (VARCHAR, PointValue)
FROM dbo.Points;
UDT Point zveřejňuje souřadnice X a Y jako vlastnosti, které pak můžete vybrat jednotlivě. Následující příkaz Transact-SQL vybere souřadnice X a Y samostatně:
SELECT ID,
PointValue.X AS xVal,
PointValue.Y AS yVal
FROM dbo.Points;
Vlastnosti X a Y vrátí celočíselnou hodnotu, která se zobrazí v sadě výsledků.
ID xVal yVal
-- ---- ----
1 3 4
2 1 5
3 1 99
Práce s proměnnými
S proměnnými můžete pracovat pomocí příkazu DECLARE a přiřadit proměnnou k typu UDT. Následující příkazy přiřazují hodnotu pomocí příkazu Transact-SQL SET a zobrazují výsledky voláním metody ToString UDT v proměnné:
DECLARE @PointValue AS Point;
SET @PointValue = (SELECT PointValue
FROM dbo.Points
WHERE ID = 2);
SELECT @PointValue.ToString() AS PointValue;
Sada výsledků zobrazí hodnotu proměnné:
PointValue
----------
-1,5
Následující příkazy Transact-SQL dosáhnout stejného výsledku pomocí SELECT místo SET pro přiřazení proměnné:
DECLARE @PointValue AS Point;
SELECT @PointValue = PointValue
FROM dbo.Points
WHERE ID = 2;
SELECT @PointValue.ToString() AS PointValue;
Rozdíl mezi použitím SELECT a SET pro přiřazení proměnné spočívá v tom, že SELECT umožňuje přiřadit více proměnných v jednom SELECT příkazu, zatímco syntaxe SET vyžaduje, aby každé přiřazení proměnné mělo vlastní SET příkaz.
Porovnání dat
Pomocí relačních operátorů můžete porovnat hodnoty v UDT, pokud při definování třídy nastavíte vlastnost IsByteOrdered na true. Další informace najdete v tématu Vytvoření uživatelem definovaných typů.
SELECT ID, PointValue.ToString() AS Points
FROM dbo.Points
WHERE PointValue > CONVERT (Point, '2,2');
Interní hodnoty UDT můžete porovnat bez ohledu na nastavení IsByteOrdered, pokud jsou hodnoty samotné srovnatelné. Následující příkaz Transact-SQL vybere řádky, ve kterých je X větší než Y:
SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points
WHERE PointValue.X < PointValue.Y;
Můžete také použít relační operátory s proměnnými, jak je znázorněno v tomto dotazu, který hledá odpovídající PointValue.
DECLARE @ComparePoint AS Point;
SET @ComparePoint = CONVERT (Point, '3,4');
SELECT ID, PointValue.ToString() AS MatchingPoint
FROM dbo.Points
WHERE PointValue = @ComparePoint;
Vyvolání metod UDT
Můžete také vyvolat metody definované v UDT v Transact-SQL. Třída Point obsahuje tři metody, Distance, DistanceFroma DistanceFromXY. Seznam kódu definující tyto tři metody najdete v tématu Vytvoření uživatelem definovaných typů pomocí ADO.NET.
Následující příkaz Transact-SQL volá metodu PointValue.Distance:
SELECT ID,
PointValue.X AS [Point.X],
PointValue.Y AS [Point.Y],
PointValue.Distance() AS DistanceFromZero
FROM dbo.Points;
Výsledky se zobrazí ve sloupci Distance:
ID X Y Distance
-- -- -- ----------------
1 3 4 5
2 1 5 5.09901951359278
3 1 99 99.0050503762308
Metoda DistanceFrom přebírá argument Point datového typu a zobrazuje vzdálenost od zadaného bodu k PointValue:
SELECT ID,
PointValue.ToString() AS Pnt,
PointValue.DistanceFrom(CONVERT (Point, '1,99')) AS DistanceFromPoint
FROM dbo.Points;
Výsledky zobrazují výsledky metody DistanceFrom pro každý řádek v tabulce:
ID Pnt DistanceFromPoint
-- --- -----------------
1 3,4 95.0210502993942
2 1,5 94
3 1,9 90
Metoda DistanceFromXY vezme body jednotlivě jako argumenty:
SELECT ID,
PointValue.X AS X,
PointValue.Y AS Y,
PointValue.DistanceFromXY(1, 99) AS DistanceFromXY
FROM dbo.Points;
Sada výsledků je stejná jako metoda DistanceFrom.
Aktualizace dat ve sloupci UDT
Pokud chcete aktualizovat data ve sloupci UDT, použijte příkaz Transact-SQL UPDATE. Můžete také použít metodu UDT k aktualizaci stavu objektu. Následující příkaz Transact-SQL aktualizuje jeden řádek v tabulce:
UPDATE dbo.Points
SET PointValue = CAST ('1,88' AS Point)
WHERE ID = 3;
Prvky UDT můžete aktualizovat také samostatně. Následující příkaz Transact-SQL aktualizuje pouze souřadnici Y:
UPDATE dbo.Points
SET PointValue.Y = 99
WHERE ID = 3;
Pokud je UDT definován pomocí pořadí bajtů nastaveným na true, Transact-SQL může vyhodnotit sloupec UDT v klauzuli WHERE.
UPDATE dbo.Points
SET PointValue = '4,5'
WHERE PointValue = '3,4';
Omezení aktualizací
Pomocí jazyka Transact-SQL nelze aktualizovat více vlastností najednou. Například následující příkaz UPDATE selže s chybou, protože v jednom příkazu UPDATE nemůžete použít stejný název sloupce dvakrát.
UPDATE dbo.Points
SET PointValue.X = 5, PointValue.Y = 99
WHERE ID = 3;
Pokud chcete každý bod aktualizovat jednotlivě, musíte v sestavení Point UDT vytvořit metodu mutátoru. Potom můžete vyvolat metodu mutatoru pro aktualizaci objektu v příkazu Transact-SQL UPDATE, jak je znázorněno v následujícím příkladu:
UPDATE dbo.Points
SET PointValue.SetXY(5, 99)
WHERE ID = 3;
Odstranění dat ve sloupci UDT
Pokud chcete odstranit data v UDT, použijte příkaz Transact-SQL DELETE. Následující příkaz odstraní všechny řádky v tabulce, které odpovídají kritériím zadaným v klauzuli WHERE. Pokud v příkazu DELETE vynecháte klauzuli WHERE, odstraní se všechny řádky v tabulce.
DELETE dbo.Points
WHERE PointValue = CAST ('1,99' AS Point);
Příkaz UPDATE použijte, pokud chcete odebrat hodnoty ve sloupci UDT a ponechat ostatní hodnoty řádků nedotčené. Tento příklad nastaví PointValue na hodnotu null.
UPDATE dbo.Points
SET PointValue = NULL
WHERE ID = 2;