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:
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.
ilk eşitleme sonra temel abone adresindeki hala türüdür datetime.
Güncelleştirme sütun abone adresindeki c1.
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.