Aracılığıyla paylaş


sql_variant (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

SQL Server tarafından desteklenen çeşitli veri türlerinin değerlerini depolayan bir veri türü.

Transact-SQL söz dizimi kuralları

Syntax

sql_variant  

Remarks

sql_variant sütunlarda, parametrelerde, değişkenlerde ve kullanıcı tanımlı işlevlerin dönüş değerlerinde kullanılabilir. sql_variant, bu veritabanı nesnelerinin diğer veri türlerinin değerlerini desteklemesini sağlar.

sql_variant türünde bir sütun farklı veri türlerinde satırlar içerebilir. Örneğin, sql_variant olarak tanımlanan bir sütun ikilidepolayabilir ve char değerlerini .

sql_variant uzunluğu en fazla 8016 bayt olabilir. Bu hem temel tür bilgilerini hem de temel tür değerini içerir. Gerçek temel tür değerinin uzunluk üst sınırı 8.000 bayttır.

sql_variant veri türü, toplama ve çıkarma gibi işlemlere katılmadan önce temel veri türü değerine atanmalıdır.

sql_variant varsayılan değer atanabilir. Bu veri türü, temel alınan değer olarak NULL değerine de sahip olabilir, ancak NULL değerleri ilişkili bir temel türe sahip olmaz. Ayrıca, sql_variant temel türü olarak başka bir sql_variant olamaz.

Benzersiz, birincil veya yabancı anahtar sql_varianttüründe sütunlar içerebilir, ancak belirli bir satırın anahtarını oluşturan veri değerlerinin toplam uzunluğu bir dizinin maksimum uzunluğundan fazla olmamalıdır. Bu 900 bayttır.

Bir tabloda herhangi bir sayıda sql_variant sütunu olabilir.

sql_variant CONTAINSTABLE ve FREETEXTTABLE'da kullanılamaz.

ODBC, sql_varianttam olarak desteklemez. Bu nedenle, ODBC için Microsoft OLE DB Sağlayıcısı'nı (MSDASQL) kullandığınızda sql_variant sütun sorguları ikili veri olarak döndürülür. Örneğin, 'PS2091' karakter dizesi verilerini içeren bir sql_variant sütunu 0x505332303931 olarak döndürülür.

sql_variant Değerlerini Karşılaştırma

sql_variant veri türü, dönüştürme için veri türü hiyerarşi listesinin en üstüne aittir. sql_variant karşılaştırmalar için SQL Server veri türü hiyerarşi sırası veri türü aileleri olarak gruplandırılır.

Veri türü hiyerarşisi Veri türü ailesi
sql_variant sql_variant
datetime2 Tarih ve saat
datetimeoffset Tarih ve saat
datetime Tarih ve saat
smalldatetime Tarih ve saat
date Tarih ve saat
time Tarih ve saat
float Yaklaşık sayısal
real Yaklaşık sayısal
decimal Tam sayısal
money Tam sayısal
smallmoney Tam sayısal
bigint Tam sayısal
int Tam sayısal
smallint Tam sayısal
tinyint Tam sayısal
bit Tam sayısal
nvarchar Unicode
nchar Unicode
varchar Unicode
char Unicode
varbinary Binary
binary Binary
uniqueidentifier Uniqueidentifier

Aşağıdaki kurallar sql_variant karşılaştırmalar için geçerlidir:

  • Farklı temel veri türlerinin sql_variant değerleri karşılaştırıldığında ve temel veri türleri farklı veri türü ailelerinde olduğunda, hiyerarşi grafiğinde veri türü ailesi daha yüksek olan değer, iki değerin daha büyük olduğu kabul edilir.
  • Farklı temel veri türlerinin sql_variant değerleri karşılaştırıldığında ve temel veri türleri aynı veri türü ailesinde olduğunda, hiyerarşi grafiğinde temel veri türü daha düşük olan değer örtük olarak diğer veri türüne dönüştürülür ve karşılaştırma yapılır.
  • sql_variantkarakteri, varchar, ncharveya nvarchar veri türlerinin değerleri karşılaştırıldığında, bunların harmanlamaları ilk olarak şu ölçütlere göre karşılaştırılır: LCID, LCID sürümü, karşılaştırma bayrakları ve sıralama kimliği. Bu ölçütlerin her biri tamsayı değerleri olarak ve listelenen sırayla karşılaştırılır. Bu ölçütlerin tümü eşitse, gerçek dize değerleri harmanlama göre karşılaştırılır.

sql_variant Verileri Dönüştürme

sql_variant veri türünü işlerken SQL Server, diğer veri türlerine sahip nesnelerin sql_variant türüne örtük olarak dönüştürülmelerini destekler. Ancak SQL Server, sql_variant verilerden başka bir veri türüne sahip bir nesneye örtük dönüştürmeleri desteklemez.

Restrictions

Aşağıda, sql_variantkullanılarak depolanamayan değer türleri listelenmiştir:

  • datetimeoffset1
  • geography
  • geometry
  • hierarchyid
  • image
  • ntext
  • nvarchar(max)
  • Rowversion (zaman damgası)
  • text
  • varchar(max)
  • varbinary(max)
  • Kullanıcı tanımlı türler
  • xml

SQL Server 2012 ve üzeri 1 datetimeoffsetkısıtlamaz.

Examples

A. Tabloda sql_variant kullanma

Aşağıdaki örnek, sql_variant veri türüne sahip bir tablo oluşturur. Ardından örnek, SQL_VARIANT_PROPERTYcolA ve 46279.1türünde colB sahip olduğu =1689tableAcolAsql_variant değeri hakkında colB bilgi alır.

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  

Sonuç kümesi aşağıdadır. Bu üç değerin her birinin bir sql_variantolduğunu unutmayın.

Base Type    Precision    Scale  
---------    ---------    -----  
decimal      8           2  
  
(1 row(s) affected)  

B. Değişken olarak sql_variant kullanma

Aşağıdaki örnek, sql_variant veri türünü kullanarak bir değişken oluşturur ve SQL_VARIANT_PROPERTYadlı değişken hakkında @v1 bilgi alır.

DECLARE @v1 sql_variant;  
SET @v1 = 'ABC';  
SELECT @v1;  
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');  
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');  

Ayrıca bakınız

CAST ve CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)