sql_variant (T-SQL)
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Jenis data yang menyimpan nilai berbagai jenis data yang didukung SQL Server.
Sintaks
sql_variant
Keterangan
sql_variant dapat digunakan dalam kolom, parameter, variabel, dan nilai pengembalian fungsi yang ditentukan pengguna. sql_variant memungkinkan objek database ini untuk mendukung nilai jenis data lainnya.
Kolom jenis sql_variant mungkin berisi baris dari jenis data yang berbeda. Misalnya, kolom yang didefinisikan sebagai sql_variant dapat menyimpan nilai int, biner, dan karakter.
sql_variant dapat memiliki panjang maksimum 8016 byte. Ini termasuk informasi jenis dasar dan nilai jenis dasar. Panjang maksimum nilai jenis dasar aktual adalah 8.000 byte.
Jenis data sql_variant harus terlebih dahulu dilemparkan ke nilai jenis data dasarnya sebelum berpartisipasi dalam operasi seperti penambahan dan pengurangan.
sql_variant dapat diberi nilai default. Jenis data ini juga dapat memiliki NULL sebagai nilai yang mendasarnya, tetapi nilai NULL tidak akan memiliki jenis dasar terkait. Selain itu, sql_variant tidak dapat memiliki sql_variant lain sebagai jenis dasarnya.
Kunci unik, primer, atau asing dapat mencakup kolom jenis sql_variant, tetapi panjang total nilai data yang membentuk kunci baris tertentu tidak boleh lebih dari panjang maksimum indeks. Ini adalah 900 byte.
Tabel dapat memiliki sejumlah kolom sql_variant .
sql_variant tidak dapat digunakan dalam CONTAINSTABLE dan FREETEXTTABLE.
ODBC tidak sepenuhnya mendukung sql_variant. Oleh karena itu, kueri kolom sql_variant dikembalikan sebagai data biner saat Anda menggunakan Penyedia Microsoft OLE DB untuk ODBC (MSDASQL). Misalnya, kolom sql_variant yang berisi data string karakter 'PS2091' dikembalikan sebagai 0x505332303931.
Membandingkan Nilai sql_variant
Jenis data sql_variant milik bagian atas daftar hierarki jenis data untuk konversi. Untuk perbandingan sql_variant , urutan hierarki jenis data SQL Server dikelompokkan ke dalam keluarga jenis data.
Hierarki tipe data | Keluarga jenis data |
---|---|
aql_variant | aql_variant |
datetime2 | Tanggal dan waktu |
datetimeoffset | Tanggal dan waktu |
datetime | Tanggal dan waktu |
smalldatetime | Tanggal dan waktu |
date | Tanggal dan waktu |
time | Tanggal dan waktu |
float | Perkiraan numerik |
real | Perkiraan numerik |
desimal | Angka yang tepat |
uang | Angka yang tepat |
smallmoney | Angka yang tepat |
bigint | Angka yang tepat |
int | Angka yang tepat |
smallint | Angka yang tepat |
kecil | Angka yang tepat |
bit | Angka yang tepat |
nvarchar | Unicode |
nchar | Unicode |
varchar | Unicode |
Char | Unicode |
varbinary | Biner |
biner | Biner |
pengidentifikasi unik | Pengidentifikasi unik |
Aturan berikut berlaku untuk perbandingan sql_variant :
- Ketika sql_variant nilai dari jenis data dasar yang berbeda dibandingkan dan jenis data dasar berada dalam keluarga jenis data yang berbeda, nilai yang keluarga jenis datanya lebih tinggi dalam bagan hierarki dianggap lebih besar dari dua nilai.
- Ketika nilai sql_variant dari jenis data dasar yang berbeda dibandingkan dan jenis data dasar berada dalam keluarga jenis data yang sama, nilai yang jenis data dasarnya lebih rendah dalam bagan hierarki secara implisit dikonversi ke jenis data lain dan perbandingannya kemudian dibuat.
- Saat sql_variant nilai tipe data karakter, varchar, nchar, atau nvarchar dibandingkan, kolatasinya pertama kali dibandingkan berdasarkan kriteria berikut: LCID, versi LCID, bendera perbandingan, dan ID pengurutan. Masing-masing kriteria ini dibandingkan sebagai nilai bilangan bulat, dan dalam urutan yang tercantum. Jika semua kriteria ini sama, maka nilai string aktual dibandingkan sesuai dengan kolaterasi.
Mengonversi Data sql_variant
Saat menangani jenis data sql_variant , SQL Server mendukung konversi implisit objek dengan jenis data lain ke jenis sql_variant . Namun, SQL Server tidak mendukung konversi implisit dari data sql_variant ke objek dengan jenis data lain.
Batasan
Berikut ini mencantumkan tipe nilai yang tidak dapat disimpan dengan menggunakan sql_variant:
- datetimeoffset1
- geografi
- geometri
- hierarchyid
- gambar
- ntext
- nvarchar(maks)
- rowversion (tanda waktu)
- text
- varchar(max)
- varbinary(max)
- Jenis yang ditentukan pengguna
- xml
1 SQL Server 2012 dan yang lebih besar tidak membatasi datetimeoffset.
Contoh
J. Menggunakan sql_variant dalam tabel
Contoh berikut, membuat tabel dengan jenis data sql_variant. Kemudian contoh mengambil SQL_VARIANT_PROPERTY
informasi tentang colA
nilai 46279.1
di mana =colB
1689
, mengingat yang tableA
memiliki colA
jenis sql_variant
dan .colB
CREATE TABLE tableA(colA sql_variant, colB INT)
INSERT INTO tableA values ( CAST(46279.1 as decimal(8,2)), 1689)
SELECT SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',
SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',
SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'
FROM tableA
WHERE colB = 1689
Berikut set hasilnya. Perhatikan bahwa masing-masing dari ketiga nilai ini adalah sql_variant.
Base Type Precision Scale
--------- --------- -----
decimal 8 2
(1 row(s) affected)
B. Menggunakan sql_variant sebagai variabel
Contoh berikut, membuat variabel menggunakan jenis data sql_variant, lalu mengambil SQL_VARIANT_PROPERTY
informasi tentang variabel bernama @v1.
DECLARE @v1 sql_variant;
SET @v1 = 'ABC';
SELECT @v1;
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');
Lihat juga
CAST dan CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (T-SQL)