Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
van toepassing op:SQL Server-
Transact-SQL biedt geen gespecialiseerde syntaxis voor INSERT, UPDATEof DELETE instructies bij het wijzigen van gegevens in UDT-kolommen (user-defined type). De Transact-SQL CAST- of CONVERT-functies worden gebruikt om systeemeigen gegevenstypen naar het UDT-type te casten.
Gegevens invoegen in een UDT-kolom
In de volgende Transact-SQL instructies worden drie rijen met voorbeeldgegevens in de Points tabel ingevoegd. Het Point gegevenstype bestaat uit X- en Y-gehele getallen die worden weergegeven als eigenschappen van de UDT. U moet de functie CAST of CONVERT gebruiken om de door komma's gescheiden X- en Y-waarden naar het Point type te casten. De eerste twee instructies gebruiken de CONVERT functie om een tekenreekswaarde te converteren naar het Point type en de derde instructie maakt gebruik van de CAST functie:
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));
Gegevens selecteren
De volgende SELECT instructie selecteert de binaire waarde van de UDT.
SELECT ID, PointValue
FROM dbo.Points;
Als u de uitvoer in een leesbare indeling wilt zien, roept u de ToString methode van de Point UDT aan, waarmee de waarde wordt geconverteerd naar de tekenreeksweergave.
SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points;
Dit is de resultatenset.
ID PointValue
-- ----------
1 3,4
2 1,5
3 1,99
U kunt ook de functies Transact-SQL CAST en CONVERT gebruiken om dezelfde resultaten te bereiken.
SELECT ID, CAST (PointValue AS VARCHAR)
FROM dbo.Points;
SELECT ID, CONVERT (VARCHAR, PointValue)
FROM dbo.Points;
De Point UDT toont de X- en Y-coördinaten als eigenschappen, die u vervolgens afzonderlijk kunt selecteren. Met de volgende Transact-SQL instructie worden de X- en Y-coördinaten afzonderlijk geselecteerd:
SELECT ID,
PointValue.X AS xVal,
PointValue.Y AS yVal
FROM dbo.Points;
De eigenschappen X en Y retourneren een geheel getal dat wordt weergegeven in de resultatenset.
ID xVal yVal
-- ---- ----
1 3 4
2 1 5
3 1 99
Werken met variabelen
U kunt met variabelen werken met behulp van de instructie DECLARE om een variabele toe te wijzen aan een UDT-type. De volgende instructies wijzen een waarde toe met behulp van de Transact-SQL SET-instructie en geven de resultaten weer door de ToString methode van de UDT op de variabele aan te roepen:
DECLARE @PointValue AS Point;
SET @PointValue = (SELECT PointValue
FROM dbo.Points
WHERE ID = 2);
SELECT @PointValue.ToString() AS PointValue;
In de resultatenset wordt de variabelewaarde weergegeven:
PointValue
----------
-1,5
De volgende Transact-SQL-instructies bereiken hetzelfde resultaat met behulp van SELECT in plaats van SET voor de variabeletoewijzing:
DECLARE @PointValue AS Point;
SELECT @PointValue = PointValue
FROM dbo.Points
WHERE ID = 2;
SELECT @PointValue.ToString() AS PointValue;
Het verschil tussen het gebruik van SELECT en SET voor variabeletoewijzing is dat SELECT u meerdere variabelen in één SELECT instructie kunt toewijzen, terwijl voor de SET syntaxis elke variabeletoewijzing een eigen SET-instructie moet hebben.
Gegevens vergelijken
U kunt vergelijkingsoperatoren gebruiken om waarden in uw UDT te vergelijken als u de eigenschap IsByteOrdered instelt op true bij het definiëren van de klasse. Zie Door de gebruiker gedefinieerde typen makenvoor meer informatie.
SELECT ID, PointValue.ToString() AS Points
FROM dbo.Points
WHERE PointValue > CONVERT (Point, '2,2');
U kunt interne waarden van de UDT vergelijken, ongeacht de IsByteOrdered instelling als de waarden zelf vergelijkbaar zijn. De volgende Transact-SQL instructie selecteert rijen waarbij X groter is dan Y:
SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points
WHERE PointValue.X < PointValue.Y;
U kunt ook vergelijkingsoperators gebruiken met variabelen, zoals wordt weergegeven in deze query waarmee wordt gezocht naar een overeenkomende PointValue.
DECLARE @ComparePoint AS Point;
SET @ComparePoint = CONVERT (Point, '3,4');
SELECT ID, PointValue.ToString() AS MatchingPoint
FROM dbo.Points
WHERE PointValue = @ComparePoint;
UDT-methoden aanroepen
U kunt ook methoden aanroepen die zijn gedefinieerd in uw UDT in Transact-SQL. De klasse Point bevat drie methoden, Distance, DistanceFromen DistanceFromXY. Zie Door de gebruiker gedefinieerde typen maken met ADO.NETvoor de codevermeldingen die deze drie methoden definiëren.
Met de volgende Transact-SQL-instructie wordt de methode PointValue.Distance aangeroepen:
SELECT ID,
PointValue.X AS [Point.X],
PointValue.Y AS [Point.Y],
PointValue.Distance() AS DistanceFromZero
FROM dbo.Points;
De resultaten worden weergegeven in de kolom Distance:
ID X Y Distance
-- -- -- ----------------
1 3 4 5
2 1 5 5.09901951359278
3 1 99 99.0050503762308
De methode DistanceFrom gebruikt een argument van Point gegevenstype en geeft de afstand weer van het opgegeven punt naar de PointValue:
SELECT ID,
PointValue.ToString() AS Pnt,
PointValue.DistanceFrom(CONVERT (Point, '1,99')) AS DistanceFromPoint
FROM dbo.Points;
In de resultaten worden de resultaten van de DistanceFrom methode weergegeven voor elke rij in de tabel:
ID Pnt DistanceFromPoint
-- --- -----------------
1 3,4 95.0210502993942
2 1,5 94
3 1,9 90
De methode DistanceFromXY neemt de punten afzonderlijk als argumenten:
SELECT ID,
PointValue.X AS X,
PointValue.Y AS Y,
PointValue.DistanceFromXY(1, 99) AS DistanceFromXY
FROM dbo.Points;
De resultatenset is hetzelfde als de methode DistanceFrom.
Gegevens in een UDT-kolom bijwerken
Als u gegevens in een UDT-kolom wilt bijwerken, gebruikt u de Transact-SQL UPDATE-instructie. U kunt ook een methode van de UDT gebruiken om de status van het object bij te werken. Met de volgende Transact-SQL-instructie wordt één rij in de tabel bijgewerkt:
UPDATE dbo.Points
SET PointValue = CAST ('1,88' AS Point)
WHERE ID = 3;
U KUNT UDT-elementen ook afzonderlijk bijwerken. In de volgende Transact-SQL-instructie wordt alleen de Y-coördinaat bijgewerkt:
UPDATE dbo.Points
SET PointValue.Y = 99
WHERE ID = 3;
Als de UDT is gedefinieerd met bytevolgorde die is ingesteld op true, kan Transact-SQL de UDT-kolom evalueren in een WHERE-component.
UPDATE dbo.Points
SET PointValue = '4,5'
WHERE PointValue = '3,4';
Beperkingen bijwerken
U kunt niet meerdere eigenschappen tegelijk bijwerken met Behulp van Transact-SQL. De volgende UPDATE-instructie mislukt bijvoorbeeld met een fout omdat u niet twee keer dezelfde kolomnaam kunt gebruiken in één UPDATE instructie.
UPDATE dbo.Points
SET PointValue.X = 5, PointValue.Y = 99
WHERE ID = 3;
Als u elk punt afzonderlijk wilt bijwerken, moet u een mutatormethode maken in de Point UDT-assembly. Vervolgens kunt u de mutatormethode aanroepen om het object bij te werken in een Transact-SQL UPDATE instructie, zoals in het volgende voorbeeld:
UPDATE dbo.Points
SET PointValue.SetXY(5, 99)
WHERE ID = 3;
Gegevens verwijderen in een UDT-kolom
Als u gegevens in een UDT wilt verwijderen, gebruikt u de Transact-SQL DELETE-instructie. Met de volgende instructie worden alle rijen in de tabel verwijderd die voldoen aan de criteria die zijn opgegeven in de WHERE-component. Als u de WHERE component weglaat in een DELETE-instructie, worden alle rijen in de tabel verwijderd.
DELETE dbo.Points
WHERE PointValue = CAST ('1,99' AS Point);
Gebruik de instructie UPDATE als u de waarden in een UDT-kolom wilt verwijderen terwijl andere rijwaarden intact blijven. In dit voorbeeld wordt de PointValue ingesteld op null.
UPDATE dbo.Points
SET PointValue = NULL
WHERE ID = 2;