Memanipulasi data jenis yang ditentukan pengguna (UDT)

Berlaku untuk:SQL Server

Transact-SQL tidak menyediakan sintaks khusus untuk pernyataan INSERT, UPDATE, atau DELETE saat memodifikasi data dalam kolom jenis yang ditentukan pengguna (UDT). Fungsi Transact-SQL CAST atau CONVERT digunakan untuk mentransmisikan jenis data asli ke jenis UDT.

Menyisipkan data dalam kolom UDT

Pernyataan Transact-SQL berikut menyisipkan tiga baris data sampel ke dalam tabel Points. Jenis data Point terdiri dari nilai bilangan bulat X dan Y yang diekspos sebagai properti UDT. Anda harus menggunakan fungsi CAST atau CONVERT untuk mentransmisikan nilai X dan Y yang dibatasi koma ke jenis Point. Dua pernyataan pertama menggunakan fungsi CONVERT untuk mengonversi nilai string ke jenis Point, dan pernyataan ketiga menggunakan fungsi 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));

Pilih data

Pernyataan SELECT berikut memilih nilai biner UDT.

SELECT ID, PointValue
FROM dbo.Points;

Untuk melihat output yang ditampilkan dalam format yang dapat dibaca, panggil metode ToString UDT Point, yang mengonversi nilai ke representasi stringnya.

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

Berikut adalah hasil yang ditetapkan.

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

Anda juga dapat menggunakan fungsi Transact-SQL CAST dan CONVERT untuk mencapai hasil yang sama.

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

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

UDT Point mengekspos koordinat X dan Y sebagai properti, yang kemudian dapat Anda pilih satu per satu. Pernyataan Transact-SQL berikut memilih koordinat X dan Y secara terpisah:

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

Properti X dan Y mengembalikan nilai bilangan bulat, yang ditampilkan dalam tataan hasil.

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

Bekerja dengan variabel

Anda dapat bekerja dengan variabel menggunakan pernyataan DECLARE untuk menetapkan variabel ke jenis UDT. Pernyataan berikut menetapkan nilai menggunakan pernyataan Transact-SQL SET dan menampilkan hasilnya dengan memanggil metode ToString UDT pada variabel:

DECLARE @PointValue AS Point;

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

SELECT @PointValue.ToString() AS PointValue;

Kumpulan hasil menampilkan nilai variabel:

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

Pernyataan Transact-SQL berikut mencapai hasil yang sama menggunakan SELECT daripada SET untuk penetapan variabel:

DECLARE @PointValue AS Point;

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

SELECT @PointValue.ToString() AS PointValue;

Perbedaan antara menggunakan SELECT dan SET untuk penetapan variabel adalah bahwa SELECT memungkinkan Anda menetapkan beberapa variabel dalam satu pernyataan SELECT, sedangkan sintaks SET mengharuskan setiap penetapan variabel memiliki pernyataan SET sendiri.

Membandingkan data

Anda dapat menggunakan operator perbandingan untuk membandingkan nilai di UDT jika Anda mengatur properti IsByteOrdered ke true saat menentukan kelas. Untuk informasi selengkapnya, lihat Membuat jenis yang ditentukan pengguna.

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

Anda dapat membandingkan nilai internal UDT terlepas dari pengaturan IsByteOrdered jika nilai itu sendiri sebanding. Pernyataan Transact-SQL berikut memilih baris di mana X lebih besar dari Y:

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

Anda juga dapat menggunakan operator perbandingan dengan variabel, seperti yang diperlihatkan dalam kueri ini yang mencari PointValueyang cocok.

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

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

Memanggil metode UDT

Anda juga dapat memanggil metode yang ditentukan dalam UDT Anda di Transact-SQL. Kelas Point berisi tiga metode, Distance, DistanceFrom, dan DistanceFromXY. Untuk daftar kode yang menentukan ketiga metode ini, lihat Membuat jenis yang ditentukan pengguna dengan ADO.NET.

Pernyataan Transact-SQL berikut memanggil metode PointValue.Distance:

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

Hasilnya ditampilkan di kolom Distance:

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

Metode DistanceFrom mengambil argumen jenis data Point, dan menampilkan jarak dari titik yang ditentukan ke PointValue:

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

Hasilnya menampilkan hasil metode DistanceFrom untuk setiap baris dalam tabel:

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

Metode DistanceFromXY mengambil poin satu per satu sebagai argumen:

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

Tataan hasilnya sama dengan metode DistanceFrom.

Memperbarui data dalam kolom UDT

Untuk memperbarui data dalam kolom UDT, gunakan pernyataan Transact-SQL UPDATE. Anda juga dapat menggunakan metode UDT untuk memperbarui status objek. Pernyataan Transact-SQL berikut memperbarui satu baris dalam tabel:

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

Anda juga dapat memperbarui elemen UDT secara terpisah. Pernyataan Transact-SQL berikut hanya memperbarui koordinat Y:

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

Jika UDT didefinisikan dengan urutan byte yang diatur ke true, Transact-SQL dapat mengevaluasi kolom UDT dalam klausa WHERE.

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

Memperbarui batasan

Anda tidak dapat memperbarui beberapa properti sekaligus menggunakan Transact-SQL. Misalnya, pernyataan UPDATE berikut gagal dengan kesalahan karena Anda tidak dapat menggunakan nama kolom yang sama dua kali dalam satu pernyataan UPDATE.

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

Untuk memperbarui setiap titik satu per satu, Anda harus membuat metode mutator di rakitan UDT Point. Anda kemudian dapat memanggil metode mutator untuk memperbarui objek dalam pernyataan Transact-SQL UPDATE, seperti dalam contoh berikut:

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

Menghapus data dalam kolom UDT

Untuk menghapus data dalam UDT, gunakan pernyataan Transact-SQL DELETE. Pernyataan berikut menghapus semua baris dalam tabel yang cocok dengan kriteria yang ditentukan dalam klausa WHERE. Jika Anda menghilangkan klausa WHERE dalam pernyataan DELETE, semua baris dalam tabel akan dihapus.

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

Gunakan pernyataan UPDATE jika Anda ingin menghapus nilai dalam kolom UDT sambil membiarkan nilai baris lain tetap utuh. Contoh ini mengatur PointValue ke null.

UPDATE dbo.Points
SET PointValue = NULL
WHERE ID = 2;