Aracılığıyla paylaş


Kullanıcı tanımlı tür (UDT) verilerini işleme

Şunlar için geçerlidir: SQL Server

Transact-SQL, kullanıcı tanımlı tür (UDT) sütunlarındaki verileri değiştirirken INSERT, UPDATEveya DELETE deyimleri için özel söz dizimi sağlamaz. Transact-SQL CAST veya CONVERT işlevleri, yerel veri türlerini UDT türüne dökmek için kullanılır.

UDT sütununa veri ekleme

Aşağıdaki Transact-SQL deyimleri, Points tablosuna üç örnek veri satırı ekler. Point veri türü, UDT'nin özellikleri olarak gösterilen X ve Y tamsayı değerlerinden oluşur. Virgülle ayrılmış X ve Y değerlerini Point türüne değiştirmek için CAST veya CONVERT işlevini kullanmanız gerekir. İlk iki deyim, bir dize değerini Point türüne dönüştürmek için CONVERT işlevini, üçüncü deyim ise CAST işlevini kullanır:

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));

Veri seçme

Aşağıdaki SELECT deyimi UDT'nin ikili değerini seçer.

SELECT ID, PointValue
FROM dbo.Points;

Okunabilir biçimde görüntülenen çıkışı görmek için, değeri dize gösterimine dönüştüren Point UDT'nin ToString yöntemini çağırın.

SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points;

Sonuç kümesi aşağıdadır.

ID PointValue
-- ----------
 1 3,4
 2 1,5
 3 1,99

Aynı sonuçları elde etmek için Transact-SQL CAST ve CONVERT işlevlerini de kullanabilirsiniz.

SELECT ID, CAST (PointValue AS VARCHAR)
FROM dbo.Points;

SELECT ID, CONVERT (VARCHAR, PointValue)
FROM dbo.Points;

Point UDT, X ve Y koordinatlarını özellik olarak kullanıma sunar ve bunu tek tek seçebilirsiniz. Aşağıdaki Transact-SQL deyimi X ve Y koordinatlarını ayrı olarak seçer:

SELECT ID,
       PointValue.X AS xVal,
       PointValue.Y AS yVal
FROM dbo.Points;

X ve Y özellikleri, sonuç kümesinde görüntülenen bir tamsayı değeri döndürür.

ID xVal yVal
-- ---- ----
 1    3    4
 2    1    5
 3    1   99

Değişkenlerle çalışma

UDT türüne değişken atamak için DECLARE deyimini kullanarak değişkenlerle çalışabilirsiniz. Aşağıdaki deyimler Transact-SQL SET deyimini kullanarak bir değer atar ve değişkende UDT'nin ToString yöntemini çağırarak sonuçları görüntüler:

DECLARE @PointValue AS Point;

SET @PointValue = (SELECT PointValue
                   FROM dbo.Points
                   WHERE ID = 2);

SELECT @PointValue.ToString() AS PointValue;

Sonuç kümesi değişken değerini görüntüler:

PointValue
----------
-1,5

Aşağıdaki Transact-SQL deyimleri, değişken ataması için SET yerine SELECT kullanarak aynı sonucu elde eder:

DECLARE @PointValue AS Point;

SELECT @PointValue = PointValue
FROM dbo.Points
WHERE ID = 2;

SELECT @PointValue.ToString() AS PointValue;

Değişken ataması için SELECT ve SET kullanma arasındaki fark, SELECT tek bir SELECT deyiminde birden çok değişken atamanıza olanak sağlamasıdır, ancak SET söz diziminde her değişken atamasının kendi SET deyimi olması gerekir.

Verileri karşılaştırma

sınıfını tanımlarken IsByteOrdered özelliğini true olarak ayarlarsanız, UDT'nizdeki değerleri karşılaştırmak için karşılaştırma işleçlerini kullanabilirsiniz. Daha fazla bilgi için bkz. kullanıcı tanımlı türler oluşturma.

SELECT ID, PointValue.ToString() AS Points
FROM dbo.Points
WHERE PointValue > CONVERT (Point, '2,2');

Değerlerin kendileri karşılaştırılabilirse, IsByteOrdered ayarından bağımsız olarak UDT'nin iç değerlerini karşılaştırabilirsiniz. Aşağıdaki Transact-SQL deyimi, X'in Y'den büyük olduğu satırları seçer:

SELECT ID, PointValue.ToString() AS PointValue
FROM dbo.Points
WHERE PointValue.X < PointValue.Y;

Bu sorguda gösterildiği gibi eşleşen bir PointValuearayan değişkenlerle karşılaştırma işleçlerini de kullanabilirsiniz.

DECLARE @ComparePoint AS Point;
SET @ComparePoint = CONVERT (Point, '3,4');

SELECT ID, PointValue.ToString() AS MatchingPoint
FROM dbo.Points
WHERE PointValue = @ComparePoint;

UDT yöntemlerini çağırma

Transact-SQL'de UDT'nizde tanımlanan yöntemleri de çağırabilirsiniz. Point sınıfı , DistanceFromve DistanceFromXYDistanceüç yöntem içerir. Bu üç yöntemi tanımlayan kod listeleri için bkz. ADO.NETile kullanıcı tanımlı türler oluşturma .

Aşağıdaki Transact-SQL deyimi PointValue.Distance yöntemini çağırır:

SELECT ID,
       PointValue.X AS [Point.X],
       PointValue.Y AS [Point.Y],
       PointValue.Distance() AS DistanceFromZero
FROM dbo.Points;

Sonuçlar Distance sütununda görüntülenir:

ID X  Y  Distance
-- -- -- ----------------
 1  3  4                5
 2  1  5 5.09901951359278
 3  1 99 99.0050503762308

DistanceFrom yöntemi, Point veri türünün bağımsız değişkenini alır ve belirtilen noktadan PointValueolan uzaklığı görüntüler:

SELECT ID,
       PointValue.ToString() AS Pnt,
       PointValue.DistanceFrom(CONVERT (Point, '1,99')) AS DistanceFromPoint
FROM dbo.Points;

Sonuçlar, tablodaki her satır için DistanceFrom yönteminin sonuçlarını görüntüler:

ID Pnt DistanceFromPoint
-- --- -----------------
 1 3,4  95.0210502993942
 2 1,5                94
 3 1,9                90

DistanceFromXY yöntemi, noktaları bağımsız değişken olarak ayrı ayrı alır:

SELECT ID,
       PointValue.X AS X,
       PointValue.Y AS Y,
       PointValue.DistanceFromXY(1, 99) AS DistanceFromXY
FROM dbo.Points;

Sonuç kümesi, DistanceFrom yöntemiyle aynıdır.

UDT sütunundaki verileri güncelleştirme

UDT sütunundaki verileri güncelleştirmek için Transact-SQL UPDATE deyimini kullanın. Nesnenin durumunu güncelleştirmek için UDT yöntemini de kullanabilirsiniz. Aşağıdaki Transact-SQL deyimi tablodaki tek bir satırı güncelleştirir:

UPDATE dbo.Points
SET PointValue = CAST ('1,88' AS Point)
WHERE ID = 3;

Ayrıca UDT öğelerini ayrıca güncelleştirebilirsiniz. Aşağıdaki Transact-SQL deyimi yalnızca Y koordinatını güncelleştirir:

UPDATE dbo.Points
SET PointValue.Y = 99
WHERE ID = 3;

UDT, trueolarak ayarlanmış bayt sıralamasıyla tanımlanırsa Transact-SQL WHERE yan tümcesindeki UDT sütununu değerlendirebilir.

UPDATE dbo.Points
SET PointValue = '4,5'
WHERE PointValue = '3,4';

Güncelleştirme sınırlamaları

Transact-SQL kullanarak birden çok özelliği aynı anda güncelleştiremezsiniz. Örneğin, bir UPDATE deyiminde aynı sütun adını iki kez kullanamadığınız için aşağıdaki UPDATE deyimi hatayla başarısız olur.

UPDATE dbo.Points
SET PointValue.X = 5, PointValue.Y = 99
WHERE ID = 3;

Her noktayı tek tek güncelleştirmek için Point UDT derlemesinde bir mutator yöntemi oluşturmanız gerekir. Ardından, aşağıdaki örnekte olduğu gibi bir Transact-SQL UPDATE deyimindeki nesneyi güncelleştirmek için mutator yöntemini çağırabilirsiniz:

UPDATE dbo.Points
SET PointValue.SetXY(5, 99)
WHERE ID = 3;

UDT sütunundaki verileri silme

UDT'deki verileri silmek için Transact-SQL DELETE deyimini kullanın. Aşağıdaki deyim, tablodaki WHERE yan tümcesinde belirtilen ölçütlerle eşleşen tüm satırları siler. DELETE deyimindeki WHERE yan tümcesini atlarsanız, tablodaki tüm satırlar silinir.

DELETE dbo.Points
WHERE PointValue = CAST ('1,99' AS Point);

UDT sütunundaki değerleri kaldırmak ve diğer satır değerlerini olduğu gibi bırakmak istiyorsanız UPDATE deyimini kullanın. Bu örnek, PointValue null olarak ayarlar.

UPDATE dbo.Points
SET PointValue = NULL
WHERE ID = 2;
  • SQL Server kullanıcı tanımlı türlerle çalışma