Bekerja dengan Jenis User-Defined - Memanipulasi Data 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 Poin . Jenis data Titik 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 Titik . Dua pernyataan pertama menggunakan fungsi CONVERT untuk mengonversi nilai string ke jenis Titik , 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));  

Memilih 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 dari Point UDT, yang mengonversi nilai ke representasi string-nya.

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

Ini menghasilkan hasil berikut.

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;  

Point UDT mengekspos koordinat X dan Y-nya sebagai properti, yang kemudian dapat Anda pilih satu per satu. Pernyataan T-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 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 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 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 telah mengatur properti IsByteOrdered ke true saat menentukan kelas. Untuk informasi selengkapnya, lihat Membuat Jenis User-Defined.

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 PointValue yang cocok.

DECLARE @ComparePoint 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 Titik berisi tiga metode, Jarak, DistanceFrom, dan DistanceFromXY. Untuk daftar kode yang mendefinisikan ketiga metode ini, lihat Jenis User-Defined Pengodean.

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 Jarak :

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

Metode DistanceFrom mengambil argumen jenis data Titik , 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 UPDATE Transact-SQL. 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 telah ditentukan dengan urutan byte yang diatur ke true, Transact-SQL dapat mengevaluasi kolom UDT dalam klausul 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 Point UDT. Anda kemudian dapat memanggil metode mutator untuk memperbarui objek dalam pernyataan UPDATE Transact-SQL, seperti dalam hal 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 FROM dbo.Points  
WHERE PointValue = CAST('1,99' AS Point)  

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

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

Lihat juga

Bekerja dengan Jenis User-Defined di SQL Server