sql_variant (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Jenis data yang menyimpan nilai berbagai jenis data yang didukung SQL Server.

Konvensi sintaks transact-SQL

Sintaksis

sql_variant  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

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 =colB1689 , 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 adalah hasil yang ditetapkan. 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');  

Baca juga

CAST dan CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (T-SQL)