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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk