Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              gäller för:SQL Server
Transact-SQL innehåller ingen särskild syntax för INSERT, UPDATEeller DELETE-instruktioner när du ändrar data i användardefinierade typkolumner (UDT). Funktionerna Transact-SQL CAST eller CONVERT används för att omvandla inbyggda datatyper till UDT-typen.
Infoga data i en UDT-kolumn
Följande Transact-SQL-instruktioner infogar tre rader med exempeldata i tabellen Points. Den Point datatypen består av X- och Y-heltalsvärden som exponeras som egenskaper för UDT. Du måste använda antingen funktionen CAST eller CONVERT för att omvandla kommaavgränsade X- och Y-värden till den Point typen. De första två uttrycken använder funktionen CONVERT för att konvertera ett strängvärde till den Point typen, och den tredje instruktionen använder funktionen 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älj data
Följande SELECT-instruktion väljer det binära värdet för UDT.
SELECT ID, PointValue
FROM dbo.Points;
Om du vill se utdata som visas i ett läsbart format anropar du metoden ToString för Point UDT, som konverterar värdet till dess strängrepresentation.
SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points;
Här är resultatuppsättningen.
ID PointValue
-- ----------
 1 3,4
 2 1,5
 3 1,99
Du kan också använda funktionerna Transact-SQL CAST och CONVERT för att uppnå samma resultat.
SELECT ID, CAST (PointValue AS VARCHAR)
FROM dbo.Points;
SELECT ID, CONVERT (VARCHAR, PointValue)
FROM dbo.Points;
Den Point UDT exponerar dess X- och Y-koordinater som egenskaper, som du sedan kan välja individuellt. Följande Transact-SQL-instruktion väljer X- och Y-koordinaterna separat:
SELECT ID,
       PointValue.X AS xVal,
       PointValue.Y AS yVal
FROM dbo.Points;
Egenskaperna X och Y returnerar ett heltalsvärde som visas i resultatuppsättningen.
ID xVal yVal
-- ---- ----
 1    3    4
 2    1    5
 3    1   99
Arbeta med variabler
Du kan arbeta med variabler med hjälp av instruktionen DECLARE för att tilldela en variabel till en UDT-typ. Följande instruktioner tilldelar ett värde med hjälp av Transact-SQL SET-instruktionen och visar resultatet genom att anropa UDT:s ToString-metod för variabeln:
DECLARE @PointValue AS Point;
SET @PointValue = (SELECT PointValue
                   FROM dbo.Points
                   WHERE ID = 2);
SELECT @PointValue.ToString() AS PointValue;
Resultatuppsättningen visar variabelvärdet:
PointValue
----------
-1,5
Följande Transact-SQL-instruktioner uppnår samma resultat med hjälp av SELECT i stället för SET för variabeltilldelningen:
DECLARE @PointValue AS Point;
SELECT @PointValue = PointValue
FROM dbo.Points
WHERE ID = 2;
SELECT @PointValue.ToString() AS PointValue;
Skillnaden mellan att använda SELECT och SET för variabeltilldelning är att SELECT gör att du kan tilldela flera variabler i en SELECT-instruktion, medan SET syntaxen kräver att varje variabeltilldelning har sin egen SET-instruktion.
Jämföra data
Du kan använda jämförelseoperatorer för att jämföra värden i din UDT om du anger egenskapen IsByteOrdered till true när du definierar klassen. Mer information finns i Skapa användardefinierade typer.
SELECT ID, PointValue.ToString() AS Points
FROM dbo.Points
WHERE PointValue > CONVERT (Point, '2,2');
Du kan jämföra interna värden för UDT oavsett inställningen IsByteOrdered om själva värdena är jämförbara. Följande Transact-SQL-instruktion väljer rader där X är större än Y:
SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points
WHERE PointValue.X < PointValue.Y;
Du kan också använda jämförelseoperatorer med variabler, som du ser i den här frågan som söker efter en matchande PointValue.
DECLARE @ComparePoint AS Point;
SET @ComparePoint = CONVERT (Point, '3,4');
SELECT ID, PointValue.ToString() AS MatchingPoint
FROM dbo.Points
WHERE PointValue = @ComparePoint;
Anropa UDT-metoder
Du kan också anropa metoder som definieras i din UDT i Transact-SQL. Klassen Point innehåller tre metoder, Distance, DistanceFromoch DistanceFromXY. De kodlistor som definierar dessa tre metoder finns i Skapa användardefinierade typer med ADO.NET.
Följande Transact-SQL-instruktion anropar metoden PointValue.Distance:
SELECT ID,
       PointValue.X AS [Point.X],
       PointValue.Y AS [Point.Y],
       PointValue.Distance() AS DistanceFromZero
FROM dbo.Points;
Resultatet visas i kolumnen Distance:
ID X  Y  Distance
-- -- -- ----------------
 1  3  4                5
 2  1  5 5.09901951359278
 3  1 99 99.0050503762308
Metoden DistanceFrom tar ett argument av Point datatyp och visar avståndet från den angivna punkten till PointValue:
SELECT ID,
       PointValue.ToString() AS Pnt,
       PointValue.DistanceFrom(CONVERT (Point, '1,99')) AS DistanceFromPoint
FROM dbo.Points;
Resultatet visar resultatet av metoden DistanceFrom för varje rad i tabellen:
ID Pnt DistanceFromPoint
-- --- -----------------
 1 3,4  95.0210502993942
 2 1,5                94
 3 1,9                90
Metoden DistanceFromXY tar punkterna individuellt som argument:
SELECT ID,
       PointValue.X AS X,
       PointValue.Y AS Y,
       PointValue.DistanceFromXY(1, 99) AS DistanceFromXY
FROM dbo.Points;
Resultatuppsättningen är samma som metoden DistanceFrom.
Uppdatera data i en UDT-kolumn
Om du vill uppdatera data i en UDT-kolumn använder du instruktionen Transact-SQL UPDATE. Du kan också använda en udt-metod för att uppdatera objektets tillstånd. Följande Transact-SQL-instruktion uppdaterar en enskild rad i tabellen:
UPDATE dbo.Points
SET PointValue = CAST ('1,88' AS Point)
WHERE ID = 3;
Du kan också uppdatera UDT-element separat. Följande Transact-SQL-instruktion uppdaterar endast Y-koordinaten:
UPDATE dbo.Points
SET PointValue.Y = 99
WHERE ID = 3;
Om UDT definieras med byteordning inställd på truekan Transact-SQL utvärdera UDT-kolumnen i en WHERE-sats.
UPDATE dbo.Points
SET PointValue = '4,5'
WHERE PointValue = '3,4';
Uppdateringsbegränsningar
Du kan inte uppdatera flera egenskaper samtidigt med Hjälp av Transact-SQL. Följande UPDATE-instruktion misslyckas till exempel med ett fel eftersom du inte kan använda samma kolumnnamn två gånger i en UPDATE-instruktion.
UPDATE dbo.Points
SET PointValue.X = 5, PointValue.Y = 99
WHERE ID = 3;
Om du vill uppdatera varje punkt individuellt måste du skapa en mutatormetod i den Point UDT-sammansättningen. Du kan sedan anropa mutatormetoden för att uppdatera objektet i en Transact-SQL UPDATE-instruktion, som i följande exempel:
UPDATE dbo.Points
SET PointValue.SetXY(5, 99)
WHERE ID = 3;
Ta bort data i en UDT-kolumn
Om du vill ta bort data i en UDT använder du instruktionen Transact-SQL DELETE. Följande instruktion tar bort alla rader i tabellen som matchar de villkor som anges i WHERE-satsen. Om du utelämnar WHERE-satsen i en DELETE-instruktion tas alla rader i tabellen bort.
DELETE dbo.Points
WHERE PointValue = CAST ('1,99' AS Point);
Använd instruktionen UPDATE om du vill ta bort värdena i en UDT-kolumn samtidigt som andra radvärden lämnas intakta. I det här exemplet anges PointValue till null.
UPDATE dbo.Points
SET PointValue = NULL
WHERE ID = 2;