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.For example, one sql_variant sütun can hold int, decimal, char, binary, and nchar values.Her örnek , bir sql_variant sütun kayıtları veri değeri ve meta veriler bilgileri.Bu, temel veri türü, en büyük boyut, ölçek, duyarlılık ve harmanlama içerir.

Sql_variant kullanma kuralları

Kullanmak için aşağıdaki kurallar geçerlidir 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.Bir örnek , sql_variant verileri de olamaz sql_variant olarak kendi temel temel veri türü.

  • Her türlü sabitler yüklemler veya atamaları başvurma belirtilebilir sql_variant sütunlar.

  • Yoksa bir sql_variant değeri null ise, onu değil değerlendirilir sahip bir temel temel veri türü.Hatta null değer bir değişken veya sütun belirli bir veri türü ile geldiğinde bu kural uygulanır.

    Aşağıdaki örnekte, değeri VariantCol olarak küme NULL ilişkili bir veri türü, bile null değer gelen gelen bir int değişkeni:

    DECLARE @IntVar int

    SET @IntVar = NULL

    UPDATE SomeTable SET VariantCol = @IntVar WHERE PriKey = 123

  • Atamaları, sql_variant nesneleri olan herhangi bir veri türü, bir nesneye sql_variant değer gerekir açıkça artığını veri türüne hedef.Hiçbir örtük dönüştürmeler desteklenir, bir sql_variant değeri atanmış bir nesneye olan başka bir veri türü.

  • Diğer veri türleri ile uyumluluk için katalog nesnesi uzunluğunu rapor VERİUZUNLUĞU işlev gibi sql_variant nesneleri rapor uzunluğunu veri.İçerdiği meta veriler uzunluğu bir sql_variant nesne döndürdü.

  • sql_variant sütunları ile ANSI_PADDING on her zaman çalışır.If char, nchar, varchar, nvarchar, or varbinary values are assigned from a source that has ANSI_PADDING OFF, the values are not padded.

  • Güncelleştirme abone adresindeki bir sütun sql_variant sütununa başka bir temel tür değişiklik için yol gösterir.Aşağıdaki yordam, bu kavramı gösterir:

    1. Birleştirilmiş yayın/abonelik oluşturun.Yayımlanan tablo olması gereken bir sql_variant sütun ve bir c1 sütun.Bazı veri ekleme sql_variant sütun.Temel veri türü datetime.

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

    3. Abone adresindeki sütun c1 güncelleştirin.

    4. Veri sql_variant için yayımcı adresindeki sütun değiştirildi datetime2.

Tablo sql_variant

  • sql_variant anahtar sütunlarının veri uzunluğu 900 bayt geçmediği sürece sütun dizinleri ve benzersiz anahtarlar kullanılır.

  • sql_variantsütun kimlik özellik destekler, ancak sql_variant sütunları bir parçası olarak izin verilen birincil anahtar veya yabancı anahtar.

  • sql_variant sütunları hesaplanan sütun içinde kullanılamaz.

  • Değiştirmek için alter table deyimini kullanın bir sütun dışında herhangi bir veri türü, text, ntext, image, timestamp, veya sql_variant için sql_variant.Tüm varolan değerlere dönüştürülür sql_variant temel veri türü olan veri ile aynı değerleri türü sütun önce alter table deyim yürütüldü.Veri türünü değiştirmek için alter table kullanılamaz bir sql_variant sütun diğer verilere karşı desteklenen hiçbir örtük dönüştürmeler vardır çünkü yazın sql_variant için diğer veri türleri.

Alfabe düzeni

  • collate yan tümce tümce tümcesini bir sütunun harmanlama atamak için kullanılamaz bir sql_variant sütun.Karakter tabanlı değerleri (char, nchar, varchar, ve nvarchar), bir sql_variant herhangi bir harmanlama, ve tek bir sütun olabilir sql_variant sütun değerlerini karakter tabanlı basılı tutunkarışık alfabe.

  • Ne zaman bir değer atanmış için bir sql_variant örnek, her iki veri değeri ve temel veri türü kaynak olarak atanır.Bir harmanlama kaynak değeri varsa, harmanlamayı da atanır.Kaynak değeri kullanıcı tanımlı veri türü varsa, değil kullanıcı tanımlı veri türü kullanıcı tanımlı veri türü temel veri türü atanır.The sql_variant instance does not inherit any rules or defaults bound to the user-defined data type.Bir değeri, bir sütun özellik ile bir kimlik atanır bir sql_variant örnek, sql_variant temel veri kaynak türünü alır sütun kimlik özellik. devralmaz ancakAtamak için bir hata olduğu bir text, ntext, veya image için değer bir sql_variant örnek.Diğer veri nesnelerinden değerleri atamak için yazdığında örtük dönüştürmeler desteklenen bir sql_variant nesne.

sql_variant karşılaştırmaları

sql_variantbirkaç temel veri türleri ve alfabe değerleri sütun içerebilir; karşılaştırdığınızda, bu nedenle özel kurallar sql_variant işlenen.Karşılaştırmalar, gibi ilgili işlemleri bu kurallar uygulanır:

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

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

  • Dizinler

  • MIN ve max işlevlerini toplu

  • BİRLİĞİ (olmadan)

  • Büyük/küçük harf ifadeler

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

Veri türü hiyerarşisi

Veri türü 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ı uygulamak sql_variant karşılaştırmaları:

  • Zaman sql_variant farklı bir temel veri türlerinden değerleri karşılaştırılır ve temel veri türleri farklı verilerin türü aileleri, olarak, veri türü ailesi hiyerarşisi grafikte daha yüksek değer kabul edilir en yüksek değerli iki değerler.

  • Zaman sql_variant farklı bir temel veri türlerinden değerleri karşılaştırılır ve temel veri türleri aynı veri türü ailesinde, temel veri türü olan alt hiyerarşi grafiğinde değer diğer veri türü örtülü olarak dönüştürülür ve karşılaştırma sonra yapılan.

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

Bu kurallar arasında karşılaştırmalar için farklı sonuçlar getirebilecek sql_variant değerleri karşılaştırmaları arasındaki değerleri aynı temel veri türü.

İşlenen a

İşlenen b

Değişken olmayan karşılaştırma sonucu

sql_variant karşılaştırma sonucu

'123' char

111 int

A > B

B > A

50000 int

5E1 float

A > B

B > A

Farklı veri türü aileleri değerleri karşılaştırma Doðrulamalarda başvurulan önce açıkça dönüştürülmelidir çünkü kuralları etkilerini yalnızca ne zaman sonucu sıralamaya ayarlar gözlenene bir sql_variant sütun.Aşağıdaki değerler tablo olan kurallara örnek olarak, ilgili veri türü önceliği.

PriKey

VariantCol

1

50,0 (temel tür float)

2

5000 (temel tür int)

3

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

Aşağıdaki tablo sonucunu gösterir deyim: SEÇİN * from VariantTest Sipariş by VariantCol asc.

PriKey

VariantCol

3

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

2

5000 (temel tür int)

1

50,0 (temel tür float)

Aşağıdaki değerler tablo farklı alfabe düzenlerini kullanan harmanlama önceliği ile ilgili kurallar örnek olarak verilebilir.

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 (ondalık)

Aşağıdaki tablo sonucunu gösterir deyim: SEÇİN * from CollateTest Sipariş by VariantCol.Bu tablo, gruplanmış tam sayı veri türü ailesi değerleri gösterir ve varchar değerler gruplandırılmış içinde ilgili kendi alfabe.

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 (ondalık)

4

17,5 (ondalık)

İşlevler ve sql_variant veri

Aşağıdaki Transact-SQL işlevlerini destekleyen sql_variant parametreleri ve dönüş bir sql_variant ne zaman değer bir sql_variant parametresi belirtilmişse:

BİRLEŞİM

MIN

MAX

NULLIF

Başvurular aşağıdaki işlevleri destekler sql_variant sütunları veya değişkenleri kullanın ve sql_variant dönüş değerleri veri türü olarak:

COL_LENGTH

VERİUZUNLUĞU

TYPEPROPERTY

COLUMNPROPERTY

ISNULL

 

Aşağıdaki Transact-SQL işlevlerini destekleyen sql_variant parametreleri:

AVG

RADYAN

STDSAPMA [P]

KİMLİK

ROUND

SUM

ISNUMERİC

OTURUM AÇMA

VAR [P]

GÜÇ

 

 

cast ve convert işlevlerini destekleyen sql_variant.

Yeni SQL_VARIANT_PROPERTY() işlev hakkında özellik bilgisi elde etmek için kullanılan sql_variant değerleri, veri türü, duyarlık, veya ölçek.

Diğer Transact-sql öğeleri ve sql_variant veri

sql_variant sütunları LIKE'de 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 deyimleri belirtme destek sql_variant diğer tamsayı veri türlerini aynı sözdizimi konumlarda belirtilir:

  • YORDAMI DEĞİŞTİRME

  • TABLO DEĞİŞTİRME

  • YORDAM OLUŞTURMA

  • TABLO OLUŞTURMA

  • BİLDİRMEK variable

The SQL Server catalog components report information about sql_variant columns.

Servis talebi sonucu ifade olan sql_variant herhangi bir giriş veya sonuç ise ifades değerlendirmek için sql_variant.Temel temel sonucu, çalışma sırasında sonucu olarak değerlendirilen ifade türüdür saat.

Sayısal veya dize işlenen birleştirme işleçleri olamaz sql_variant.Örneğin, aşağıdaki kod bir hata oluşturur:

SELECT VariantCol + @CharacterVar

FROM MyTable

Ancak, çevrim olarak sql_variant işlenen, işlem gerçekleştirebilirsiniz:

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

FROM MyTable

Uygulamalar ve sql_variant veri

Bir uygulama, bir sonuç küme, belirli bir sütun döndürür ister, sql_variant temel veri türü, tek bir temel alınan veri, uygulama cast veya convert işlevleri kullanabilirsiniz Transact-SQL dönmek için ifadeleri sql_variant verileri kullanarak temel temel veri türü.Bu durumda, uygulama olduğu gibi bir sonuç küme verileri işler sütun temel temel veri türü.

The SQL Server Native Client OLE DB Provider for SQL Server introduces a provider-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 Serverdönüştürür sql_variant değerlerini nvarchar(4000) çalışırken aşağıdaki arabirimlerini kullanarak bağlı uygulamaları:

  • ole db Provider for SQL Server sürüm 7.0.

  • The SQL Server ODBC Driver from SQL Server 7.0.

Durumunda ortaya çıkan dize 4.000 karakterden uzun SQL Server verir ilk 4.000 karakter.

SQL Serverdönüştürür sql_variant değerlerini varchar(255) ne zaman çalışır aşağıdaki arabirimlerini kullanarak bağlı uygulamaları:

  • The SQL Server ODBC Drivers from SQL Server version 6.5 or earlier.

Durumunda ortaya çıkan dize 255 karakterden uzun SQL Server verir ilk 255 karakter.