Aracılığıyla paylaş


Sql_variant veri kullanma

The sql_variant data type operates similarly to the variant data type in Microsoft Visual Basic.sql_variant enables a single column, parameter, or variable to store data values of different data types.Örneğin, sql_variant sütun içerebilir int, decimal, char, binary, ve nchar Değerler. Her bir sql_variant sütun, veri değeri ve meta veriler bilgi kaydeder. Temel veri türü, en büyük boyutu, Ölçek, duyarlık ve alfabe düzeni de buna dahildir.

Sql_variant kullanma kuralları

Kullanmak için aşağıdaki kurallar uygulanır sql_variant Veri Türü.

Genel değer atama

  • sql_variant objects can hold data of any SQL Server data type except text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp, and Microsoft .NET Framework common language runtime (CLR) user-defined types.örnek sql_variant verileri de olamaz sql_variant temel aldığı temel veri türü.

  • Sabitler herhangi bir tür yüklemler veya başvuru atamalarını belirtilebilir. sql_variant sütunlar.

  • Varsa bir sql_variant değer NULL olur, bu temel bir temel veri türü için nitelendirilmez. Hatta null değeri bir değişken veya belirli bir veri türü olan bir sütun geldiğinde, bu kural uygulanır.

    Aşağıdaki örnekte, değeri VariantCol ayarlamak NULL bir ilişkili veri türü bile olsa null değer geldiğini bir int değişken:

    DECLARE @IntVar int

    SET @IntVar = NULL

    UPDATE SomeTable SET VariantCol = @IntVar WHERE PriKey = 123

  • Atamaları sql_variant herhangi bir veri türü, belirtilmiş bir nesneye nesnelere sql_variant değer açıkça hedef veri türünü dönüştürmelisiniz. Örtülü hiçbir dönüşümler desteklenir, bir sql_variant nesneyi başka bir veri türüne sahip değer atanmış.

  • Katalog nesneleri VERIUZUNLUĞU işlev, uzunluğunu rapor gibi diğer veri türleri ile uyumluluk için sql_variant nesneleri, verilerin uzunluğu bildirin. Içerdiği meta veriler uzunluğunu bir sql_variant Nesne döndürülür.

  • sql_variant sütun, her zaman ANSI_PADDING ON ile çalışır.If char, nchar, varchar, nvarchar, veya varbinary değerler atanır bir kaynak ANSI_PADDING KAPALı olan, değerleri yok olarak sıfır.

  • Başka bir sql_variant sütununa temel türünü değiştirmek için bir sütun sırasında abone güncelleştirme müşteri adayı.Aşağıdaki yordam, bu kavramı gösterir:

    1. Birleştirilmiş yayın/abonelik oluşturun.Yayımlanmış bir tablonun bir sql_variant sütun ve c1 sütun olmalıdır.Bazı veriler için sql_variant ekleme sütun.Temel veri türü datetime.

    2. ilk eşitleme sonra temel abone adresindeki hala türüdür datetime.

    3. Güncelleştirme sütun abone adresindeki c1.

    4. The sql_variant veri sütun için Yayımcı tarafında değiştirildi. datetime2.

Tablolar'de sql_variant

  • sql_variant anahtar sütunlarının veri uzunluğunu 900 baytı aşamaz sürece sütunları, dizinleri ve benzersiz bir anahtar kullanılabilir.

  • sql_variant sütun, KIMLIK özellik desteklemez, ancak sql_variant sütunlar, birincil anahtarının parçası veya yabancı anahtar olarak izin verilir.

  • sql_variant sütun, hesaplanmış bir sütunda kullanılamaz.

  • Değiştirmek için ALTER tablo'ı kullanan bir sütun dışında herhangi bir veri türü text, ntext, image, timestamp, veya sql_variant Kime sql_variant. Tüm varolan değerlerine dönüştürülür.. sql_variant whose değerleri temel veri türü ALTER tablo deyim çalıştırıldı önce sütunun veri türü aynıdır. Veri türünü değiştirmek için ALTER tablo kullanılamaz bir sql_variant başka bir veri sütun gelen desteklenen hiçbir örtülü dönüşüm olmadığından yazın sql_variant Diğer veri türleri.

Harmanlama

  • COLLATE yan tümcesini, bir sütun alfabe düzeni için atamak için kullanılamaz bir sql_variant sütun. Karakter tabanlı değerleri (char, nchar, varchar, ve nvarchar) içinde bir sql_variant sütun, tüm harmanlama ve tek bir olabilir. sql_variant sütun değerlerinin karma alfabe düzenlerinden karakter tabanlı tutabilir.

  • Ne zaman bir değer atanmış bir sql_variant örnek, her iki veri değeri ve temel veri türü kaynağı olarak atanır. Kaynak değeri için bir harmanlama varsa, harmanlamayı da atanır.Kullanıcı tanımlı veri türü, kaynak değeri varsa, temel veri türü kullanıcı tanımlı veri türü, kullanıcı tanımlı veri türü atanır.The sql_variant örnek does not inherit any rules or defaults bound to the user-defined data type. Bir kimlik özelliğiyle, bir sütundan bir değer için atanıp atanmadığını bir sql_variant Örneğin, sql_variant Kaynak sütun türünü temel verileri alır, ancak KIMLIK özellik devralmaz. Atanacak bir hatadır bir text, ntext, veya image için değer bir sql_variant Örnek. Diğer veri nesnelerden değerler atama türlerinin örtülü dönüşümler desteklenmez bir sql_variant nesne.

sql_variant karşılaştırmaları

sql_variant sütun, değerleri çeşitli temel veri türleri ve alfabe düzenlerinden birini içerebilir; bu nedenle, karşılaştırma, özel kurallar uygulanır sql_variant işlenen. Bu kurallar, karşılaştırmalar gibi ilgili işlemleri uygulayın:

  • Transact-SQL Karşılaştırma işleçleri

  • TARAFINDAN SİPARİŞ, GÖRE GRUPLANDIR

  • Dizinler

  • MIN ve Mak işlevleri toplamak

  • UNION (olmadan ALL)

  • durum ifadeler

Için sql_variant karşılaştırmaları, SQL Server veri türü hiyerarşisi sırası veri tipi aileleri gruplandırılmıştır. The sql_variant family has the highest family precedence.

Veri türü hiyerarşisi

Veri tipi ailesi

sql_variant

sql_variant

datetime

Tarih ve Saat

smalldatetime

Tarih ve Saat

Float

Yaklaşık sayısal

Real

Yaklaşık sayısal

decimal

Tam bir sayısal

money

Tam bir sayısal

smallmoney

Tam bir sayısal

bigint

Tam bir sayısal

int

Tam bir sayısal

smallint

Tam bir sayısal

tinyint

Tam bir sayısal

bit

Tam bir sayısal

nvarchar

Unicode

nchar

Unicode

varchar

Unicode

char

Unicode

varbinary

Binary

binary

Binary

uniqueidentifier

Uniqueidentifier

Bu kurallar uygulanır sql_variant karşılaştırmalar:

  • Ne zaman sql_variant farklı bir temel veri türlerinden değerleri karşılaştırılır ve temel veri türleri farklı veri tipi aileleri, hiyerarşi grafiğinde, veri türü ailesinde daha yüksek olan değerdir, iki değerden daha yüksek kabul edilir.

  • Ne zaman sql_variant değerleri farklı temel veri türü s karşılaştırılır ve temel veri türü s olan aynı veri türü ailesinde, değer, temel veri türü hiyerarşisinde daha düşük grafik, diğer veri türüne örtülü olarak dönüştürülür ve karşılaştırma sonra yapılır.

  • Ne zaman sql_variant değerleri char, varchar, nchar, veya varchar veri türleri karşılaştırılır, aşağıdaki ölçütlere göre işlenir: LCID, LCID sürüm karşılaştırma bayraklar ve sıralama kimliği Bu ölçüt her karşılaştırılır tamsayı değerler olarak ve listelendikleri sırada.

Bu kurallar, farklı sonuçlar arasında karşılaştırmalar için yol açabilir sql_variant aynı temel veri değerleri arasındaki karşılaştırmaları farklı değerler yazın.

Işlenen A

Işlenen: B

Olmayan bir türevi karşılaştırma sonucu

sql_variant karşılaştırma sonucu

'123' char

111 int

C > b

b > C

50000 int

5E1 float

C > b

b > C

Farklı bir veri tipi aileleri değerleri açıkça karşılaştırma yüklemler içinde başvurulan önce dönüştürmelisiniz nedeniyle, kuralları etkilerini yalnızca, sonuç sıralamaya ayarlar gözlenen bir sql_variant sütun. Aşağıdaki değerleri tablo kuralları örnekleri ile ilgili veri türü önceliği olan.

PriKey

VariantCol

1

50,0 (temel tür float)

2

5000 (base type int)

3

'124000' (temel tür char(6))

Aşağıdaki tablo, deyim sonucu gösterir: SELECT * FROM VariantTest TARAFINDAN SİPARİŞ VariantCol ASC'DİR.

PriKey

VariantCol

3

'124000' (temel tür char(6))

2

5000 (base type int)

1

50,0 (temel tür float)

Değerler aşağıdaki tabloda, farklı alfabe kullanan bir harmanlama öncelik ilgili kuralların bir örnektir.

IntKey

VariantCol

1

qrs (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

2

ABC (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

3

qrs (varchar SQL_Latin1_General_CP1_CS_AS)

4

17,5 (ondalık)

5

ABC (varchar SQL_Latin1_General_CP1_CS_AS)

6

klm (varchar SQL_Latin1_General_CP1_CS_AS)

7

1.2 (decimal)

Aşağıdaki tablo, deyim sonucu gösterir: SELECT * FROM CollateTest TARAFINDAN SİPARİŞ VariantCol. Bu tablo, gruplanmış tam sayı veri türü ailesinden değerleri gösterir ve varchar değerleri, ilgili alfabe içinde gruplandırılmış.

IntKey

VariantCol

5

ABC (varchar SQL_Latin1_General_CP1_CS_AS)

6

klm (varchar SQL_Latin1_General_CP1_CS_AS)

3

qrs (varchar SQL_Latin1_General_CP1_CS_AS)

2

ABC (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

1

qrs (varchar SQL_Latin1_General_Pref_Cp1_CI_AS)

7

1.2 (decimal)

4

17,5 (ondalık)

Işlevler'i ve sql_variant veri

Aşağıdaki Transact-SQL işlevlerini destekler. sql_variant parametreleri ve dönüş bir sql_variant ne zaman değeri bir sql_variant parametre belirtilmiştir:

BİRLEŞİM

MIN

MAX

nullif

Başvuruları aşağıdaki işlevleri destekler sql_variant sütun veya değişkenler ve kullanma sql_variant veri türü olarak döndürülen değerleri:

col_length

VERİUZUNLUĞU

typeproperty

columnproperty

isnull

 

Aşağıdaki Transact-SQL işlevleri desteklemez sql_variant Parametreler:

AVG

RADYAN

stdev [p]

KİMLİK

ROUND

SUM

isnumeric

İŞARETİ

var [p]

GÜÇ

 

 

CAST ve CONVERT işlevlerini destekler. sql_variant.

Yeni SQL_VARIANT_PROPERTY() işlev hakkında özellik bilgisi elde etmek için kullanılabilir: sql_variant Örneğin, veri türü, duyarlık ve ölçeği değerleri.

Diğer bir Transact-SQL öğeleri ve sql_variant veri

sql_variant sütun içinde bir LIKE doğrulaması desteklenmez.

sql_variant columns are not supported in full-text indexes.sql_variant columns cannot be specified in full-text functions such as CONTAINSTABLE and FREETEXTTABLE.

Aşağıdaki Transact-SQL belirtme ifadeleri destekler. sql_variant Bu diğer tamsayı veri türlerini, aynı sözdizimi konumlarında belirtilir:

  • YORDAMI DEĞİŞTİRME

  • TABLO DEĞİŞTİRME

  • YORDAM OLUŞTURMA

  • TABLO OLUŞTURMA

  • BİLDİR variable

The SQL Server catalog components report information about sql_variant columns.

Servis TALEBI sonucu ifade olan sql_variant Giriş veya sonuç ifade s birini değerlendirmek için sql_variant. Temel alınan temel sonucu, sonuç olarak zamanında Hesaplandı türüdür.

Sayısal veya dize birleştirme işleçlerin işlenenleri olamaz sql_variant. Örneğin, aşağıdaki kod, bir hata üretir:

SELECT VariantCol + @CharacterVar

FROM MyTable

Ancak, çevrim tarafından sql_variant işlenen, işlemi gerçekleştirebilirsiniz:

SELECT CAST(VariantCol AS varchar(25)) + @CharacterVar

FROM MyTable

Uygulamaları ve sql_variant veri

Bir uygulamayı, belirli bir sütun döner küme bir sonuç istekleri, sql_variant veri türü, tek bir temel alınan verileri temel, uygulama CAST veya CONVERT işlevlerini kullanabilirsiniz Transact-SQL geri dönmek için ifadeleri sql_variant veri türünü kullanarak temel verileri temel alır. Bu durumda, uygulama verileri yalnızca bir sonuç gibi davranır. küme sütun temel temel veri türü.

The SQL Server Native istemci OLE DB sağlayıcı for SQL Server introduces a sağlayıcı-specific OLE DB type DBTYPE_SQLVARIANT for use with sql_variant columns and parameters.

The SQL Server SQL Server Native Client ODBC Driver introduces a provider-specific ODBC database data type SQL_SS_VARIANT for use with sql_variant columns and parameters.

SQL Server dönüştürür sql_variant değerleri nvarchar(4000) Aşağıdaki arabirimlerini kullanarak bağlanan uygulamalar ile çalışırken:

  • Ilgili OLE DB sağlayıcı SQL Server sürüm 7.0.

  • The SQL Server ODBC Driver from SQL Server 7.0.

Sonuç dizesi 4.000 bir karakter geçerse SQL Server ilk 4.000 olan karakterleri verir.

SQL Server dönüştürür sql_variant değerleri varchar(255) ne zaman aşağıdaki arabirimlerini kullanarak bağlandınız uygulamalarıyla çalışır:

  • The SQL Server ODBC Drivers from SQL Server sürüm 6.5 or earlier.

Sonuç dizesi 255 bir karakter geçerse SQL Server ilk 255 olan karakterleri verir.