Megosztás a következőn keresztül:


sql_variant (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Olyan adattípus, amely különböző SQL Server által támogatott adattípusok értékeit tárolja.

Transact-SQL szintaxis konvenciói

Syntax

sql_variant  

Remarks

sql_variant használható oszlopokban, paraméterekben, változókban és a felhasználó által definiált függvények visszatérési értékeiben. sql_variant lehetővé teszi, hogy ezek az adatbázis-objektumok más adattípusok értékeit is támogatják.

A sql_variant típusú oszlopok különböző adattípusú sorokat tartalmazhatnak. A sql_variant definiált oszlop például tárolhat , binárisés karakter értékeket.

sql_variant maximális hossza 8016 bájt lehet. Ez magában foglalja az alaptípus-információkat és az alaptípus értékét is. A tényleges alaptípusérték maximális hossza 8000 bájt.

Az sql_variant adattípust először az alapadattípus értékére kell leadni, mielőtt részt vesz az olyan műveletekben, mint az összeadás és kivonás.

sql_variant alapértelmezett érték rendelhető hozzá. Ennek az adattípusnak a mögöttes értéke is lehet NULL, de a NULL értékek nem lesznek társított alaptípussal. Emellett sql_variant alaptípusaként nem lehet másik sql_variant.

Az egyedi, elsődleges vagy idegen kulcs tartalmazhat sql_varianttípusú oszlopokat, de az adott sor kulcsát alkotó adatértékek teljes hossza nem haladhatja meg az index maximális hosszát. Ez 900 bájt.

A táblák tetszőleges számú sql_variant oszlopot tartalmazhatnak.

sql_variant nem használható a CONTAINSTABLE és a FREETEXTTABLE fájlban.

Az ODBC nem támogatja teljes mértékben a sql_variant. Ezért az sql_variant oszlopok lekérdezései bináris adatként jelennek meg, amikor a Microsoft OLE DB Provider for ODBC -t (MSDASQL- t) használja. Például a "PS2091" karaktersztringadatokat tartalmazó sql_variant oszlop 0x505332303931 lesz visszaadva.

Sql_variant értékek összehasonlítása

Az sql_variant adattípus az adattípus-hierarchialista tetején található konvertáláshoz. sql_variant összehasonlítások esetén az SQL Server adattípus-hierarchiarendje adattípus-családokba van csoportosítva.

Adattípus-hierarchia Adattípus-család
sql_variant sql_variant
datetime2 Dátum és idő
datetimeoffset Dátum és idő
datetime Dátum és idő
smalldatetime Dátum és idő
date Dátum és idő
time Dátum és idő
float Közelítő numerikus
real Közelítő numerikus
decimal Pontos numerikus
money Pontos numerikus
smallmoney Pontos numerikus
bigint Pontos numerikus
int Pontos numerikus
smallint Pontos numerikus
tinyint Pontos numerikus
bit Pontos numerikus
nvarchar Unicode
nchar Unicode
varchar Unicode
char Unicode
varbinary Binary
binary Binary
uniqueidentifier Uniqueidentifier

A következő szabályok vonatkoznak sql_variant összehasonlításokra:

  • Ha sql_variant különböző alapadattípusok értékeit hasonlítják össze, és az alapadattípusok különböző adattípus-családokban találhatók, a hierarchiadiagramban magasabb adattípusú érték a két érték közül a nagyobb.
  • Ha sql_variant különböző alapadattípusok értékeit hasonlítják össze, és az alapadattípusok ugyanabban az adattípus-családban találhatók, az az érték, amelynek alapadattípusa alacsonyabb a hierarchiadiagramon, implicit módon konvertálódik a másik adattípusra, és ezt követően az összehasonlítás történik.
  • Ha sql_variantkarakter, varchar, ncharvagy nvarchar adattípus értékeit hasonlítja össze először a rendszer a következő feltételek alapján: LCID, LCID verzió, összehasonlító jelzők és rendezési azonosító. A rendszer ezeket a feltételeket egész számértékként és a felsorolt sorrendben hasonlítja össze. Ha az összes feltétel egyenlő, akkor a rendszer a tényleges sztringértékeket a rendezésnek megfelelően hasonlítja össze.

Sql_variant adatok konvertálása

A sql_variant adattípus kezelésekor az SQL Server támogatja az objektumok implicit átalakítását más adattípusokkal a sql_variant típusra. Az SQL Server azonban nem támogatja az sql_variant adatok implicit konvertálását egy másik adattípusú objektumra.

Restrictions

Az alábbi lista azokat az értéktípusokat sorolja fel, amelyek nem tárolhatók sql_varianthasználatával:

  • datetimeoffset1
  • geography
  • geometry
  • hierarchyid
  • image
  • ntext
  • nvarchar(max)
  • sorverzió (időbélyeg)
  • text
  • varchar(max)
  • varbinary(max)
  • Felhasználó által definiált típusok
  • xml

1 SQL Server 2012 és újabb verzió nem korlátozza datetimeoffset.

Examples

A. Sql_variant használata egy táblában

Az alábbi példa egy sql_variant adattípusú táblát hoz létre. Ezután a példa SQL_VARIANT_PROPERTY információt kér le arról a colA értékről, 46279.1 , ahol colB =1689, mivel tableAcolA és sql_varianttípusú colB rendelkezik .

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  

Itt van az eredményhalmaz. Vegye figyelembe, hogy a három érték mindegyike egy sql_variant.

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

B. Sql_variant használata változóként

Az alábbi példa létrehoz egy változót a sql_variant adattípussal, majd lekéri SQL_VARIANT_PROPERTY adatokat egy @v1nevű változóról.

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

Lásd még

CAST és CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)