udt veri işleme

Transact-SQLözel bir sözdizimi INSERT, update veya delete deyimleri için kullanıcı tanımlı türü (udt) sütunlardaki verileri değiştirirken sağlar. Transact-SQLYerel veri türlerini udt türü cast cast veya convert işlevleri kullanılır.

udt sütunda veri ekleme

Aşağıdaki Transact-SQLörnek veri üç satır INSERT deyimleri Puan tablosu. Noktası veri türü oluşur x ve y tamsayı değerlerini udt özellikler olarak sunulur. Virgülle ayrılmış cast cast veya convert işlevini kullanmalısınız x ve y değerleri için noktası türü. İlk iki ifade, bir dize değeri dönüştürmek için çevir fonksiyonunu kullanın. noktası türü ve üçüncü ifade cast işlevi 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));

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 seçme deyimini udt ikili değerini seçer.

SELECT ID, PointValue FROM dbo.Points

SELECT ID, PointValue FROM dbo.Points

Okunabilir bir biçimde görüntülenen çıktı görmek için arama ToStringyöntemi noktası değeri için dize gösterimine dönüştürür udt.

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

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

Bu aşağıdaki sonuçları üretir.

IDPointValue
----------
13,4
21,5
31,99

IDPointValue
----------
13,4
21,5
31,99

Ayrıca Transact-SQLaynı sonuçları elde etmek için cast ve convert işlevlerini.

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

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

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

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

Noktası udt, daha sonra tek tek seçebilirsiniz özellikleri x ve y koordinatları sunar. Aşağıdaki Transact-SQLdeyimi x ve y koordinatlarını ayrı olarak seçer:

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

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

x ve y özellikleri, sonuç kümesinde görüntülenir bir tamsayı değer döndürür.

IDxValyVal
----------
134
215
3199

IDxValyVal
----------
134
215
3199

Değişkenlerle çalışmak

Bir değişken bir udt türü için atamak için declare bildirimi kullanarak değişkenler çalışabilirsiniz. Aşağıdaki deyimleri kullanarak bir değer ata Transact-SQLdeyimi ayarlamak ve UDT's çağırarak sonuçlarını görüntülemek ToStringdeğişken yöntemi:

DECLARE @PointValue Point;
SET @PointValue = (SELECT PointValue FROM dbo.Points
    WHERE ID = 2);
SELECT @PointValue.ToString() AS PointValue;

DECLARE @PointValue Point;
SET @PointValue = (SELECT PointValue FROM dbo.Points
    WHERE ID = 2);
SELECT @PointValue.ToString() AS PointValue;

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

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

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

Aşağıdaki Transact-SQLdeyimleri select kullanarak aynı sonucu elde etmek yerine set değişken atama için:

DECLARE @PointValue Point;
SELECT @PointValue = PointValue FROM dbo.Points
    WHERE ID = 2;
SELECT @PointValue.ToString() AS PointValue;

DECLARE @PointValue Point;
SELECT @PointValue = PointValue FROM dbo.Points
    WHERE ID = 2;
SELECT @PointValue.ToString() AS PointValue;

Değişken atama ise kendi set deyimi için her değişken atama set sözdizimi gerektirir seçin, bir select deyimi içinde birden çok değişken atamak sağlar için seçin ve set kullanarak arasındaki fark.

Veri karşılaştırma

Karşılaştırma işleçleri Örneğin sizin udt değerleri karşılaştırmak için kullanabileceğiniz IsByteOrderedözelliği truesınıfını tanımlarken Daha fazla bilgi için, bkz. Bir kullanıcı tanımlı türü oluşturma.

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

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

UDT bakmaksızın iç değerleri karşılaştırabilirsiniz IsByteOrderedkendilerini karşılaştırılabilir değerler ayarı. Aşağıdaki Transact-SQLdeyimi x y: büyük olduğu satırları seçer

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

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

Ayrıca, bu sorgu için eşleşen bir PointValue arar gösterildiği gibi değişkenleri ile karşılaştırma işleçleri de kullanabilirsiniz.

DECLARE @ComparePoint Point;
SET @ComparePoint = CONVERT(Point, '3,4');
SELECT ID, PointValue.ToString() AS MatchingPoint 
FROM dbo.Points
WHERE PointValue = @ComparePoint;

DECLARE @ComparePoint Point;
SET @ComparePoint = CONVERT(Point, '3,4');
SELECT ID, PointValue.ToString() AS MatchingPoint 
FROM dbo.Points
WHERE PointValue = @ComparePoint;

udt yöntemleri çağırma

Ayrıca sizin udt tanımlanan yöntemleri çağırabilirsiniz Transact-SQL. Noktası sınıf içeren üç yöntem, Distance, DistanceFrom, ve DistanceFromXY. Bu üç yöntemleri tanımlayan kod listeleri için bkz: Kullanıcı tanımlı türler kodlama.

Aşağıdaki Transact-SQLdeyimi aramalar PointValue.Distanceyöntemi:

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

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

Sonuçları görüntülenir mesafe sütunu:

IDXYDistance
------------------------
1345
2155.09901951359278
319999.0050503762308

IDXYDistance
------------------------
1345
2155.09901951359278
319999.0050503762308

DistanceFromYöntemi bir bağımsız değişken alır işaret veri türü ve görüntüler kadar belirtilen noktası PointValue uzaklığı:

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

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

Sonuçları sonuçlarını görüntülemek DistanceFromyöntemi tablosundaki her satır için:

ID PntDistanceFromPoint
---------------------
13,495.0210502993942
21,594
31,990

ID PntDistanceFromPoint
---------------------
13,495.0210502993942
21,594
31,990

DistanceFromXYYöntemi alır bağımsız olarak ayrı ayrı Puan:

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

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

Sonuç kümesi aynıdır DistanceFromyöntemi.

udt sütun veri güncelleştirme

udt sütun verileri güncelleştirmek için Transact-SQLupdate deyimi. udt yöntemi, nesnenin durumunu güncelleştirmek için de kullanabilirsiniz. Aşağıdaki Transact-SQLdeyimi tablodaki tek bir satır güncelleştirir:

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

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

udt öğeleri ayrı ayrı da güncelleştirebilirsiniz. Aşağıdaki Transact-SQLdeyimi güncelleştirmeleri yalnızca y koordinatı:

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

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

udt bayt olarak sipariş ile tanımlanmış true, Transact-SQLudt sütun where yan tümcesinde değerlendirebilirsiniz.

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

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

Kısıtlamaları güncelleştiriliyor

Sen cant'güncelleştirmek kullanarak aynı anda birden fazla özellik Transact-SQL. Örneğin, aşağıdaki güncelleştirme deyimini bir udate deyimi içinde aynı sütun adını kullanamazsınız çünkü bir hata ile başarısız olur.

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

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

Tek tek her noktasını güncelleştirmek için mutator yöntemi noktası udt derleme oluşturmak gerekir. Sonra nesneyi güncelleştirme mutator yöntemi çağırabilirsiniz bir Transact-SQLupdate deyimi aşağıdaki de:

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

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

udt sütunda veri silme

udt verileri silmek için Transact-SQLdelete deyimi. Aşağıdaki deyimi tablo where yan tümcesinde belirtilen ölçütlere uyan tüm satırları siler. delete deyimi where yan tümcesinde atlarsanız, tablodaki tüm satırlar silinir.

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

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

Diğer satır değerleri olduğu gibi bırakarak udt sütun değerleri kaldırmak isterseniz güncelleştirme deyimini kullanın. Bu örnek, PointValue null olarak ayarlar.

UPDATE dbo.Points
SET PointValue = null
WHERE ID = 2

UPDATE dbo.Points
SET PointValue = null
WHERE ID = 2

Ayrıca bkz.

Diğer Kaynaklar

SQL Server'da kullanıcı tanımlı türleri ile çalışma