Delen via


sql_variant (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Een gegevenstype waarin waarden van verschillende door SQL Server ondersteunde gegevenstypen worden opgeslagen.

Transact-SQL syntaxisconventies

Syntaxis

sql_variant  

Opmerkingen

sql_variant kunnen worden gebruikt in kolommen, parameters, variabelen en de retourwaarden van door de gebruiker gedefinieerde functies. sql_variant kunnen deze databaseobjecten waarden van andere gegevenstypen ondersteunen.

Een kolom van het type sql_variant kan rijen van verschillende gegevenstypen bevatten. Een kolom die is gedefinieerd als sql_variant kan bijvoorbeeld intopslaan, binaireen tekenwaarden.

sql_variant kan een maximale lengte hebben van 8016 bytes. Dit omvat zowel de gegevens van het basistype als de waarde van het basistype. De maximale lengte van de werkelijke basistypewaarde is 8000 bytes.

Een sql_variant gegevenstype moet eerst worden omgezet in de waarde van het basisgegevenstype voordat u deelneemt aan bewerkingen zoals optellen en aftrekken.

sql_variant kan een standaardwaarde worden toegewezen. Dit gegevenstype kan ook NULL hebben als onderliggende waarde, maar de NULL-waarden hebben geen gekoppeld basistype. Bovendien kan sql_variant geen andere sql_variant hebben als basistype.

Een unieke, primaire of refererende sleutel kan kolommen van het type sql_variantbevatten, maar de totale lengte van de gegevenswaarden waaruit de sleutel van een specifieke rij bestaat, mag niet groter zijn dan de maximale lengte van een index. Dit is 900 bytes.

Een tabel kan een willekeurig aantal sql_variant kolommen bevatten.

sql_variant kan niet worden gebruikt in CONTAINSTABLE en FREETEXTTABLE.

ODBC biedt geen volledige ondersteuning voor sql_variant. Daarom worden query's van sql_variant kolommen geretourneerd als binaire gegevens wanneer u Microsoft OLE DB Provider voor ODBC (MSDASQL) gebruikt. Een sql_variant kolom met de tekenreeksgegevens 'PS2091' wordt bijvoorbeeld geretourneerd als 0x505332303931.

Waarden voor sql_variant vergelijken

Het sql_variant gegevenstype behoort tot het begin van de lijst met gegevenstypenhiërarchie voor conversie. Voor sql_variant vergelijkingen wordt de hiërarchievolgorde van het SQL Server-gegevenstype gegroepeerd in gegevenstypefamilies.

Gegevenstypehiërarchie Gegevenstypefamilie
sql_variant sql_variant
datetime2- Datum en tijd
datetimeoffset Datum en tijd
datum/tijd- Datum en tijd
smalldatetime- Datum en tijd
datum Datum en tijd
tijd Datum en tijd
float- Bij benadering numeriek
echte Bij benadering numeriek
decimale Exacte numerieke waarde
geld Exacte numerieke waarde
smallmoney Exacte numerieke waarde
grote Exacte numerieke waarde
Exacte numerieke waarde
kleine Exacte numerieke waarde
kleine Exacte numerieke waarde
bit Exacte numerieke waarde
nvarchar- Unicode
Unicode
varchar- Unicode
teken Unicode
varbinaire Binair
binaire Binair
uniqueidentifier- Uniqueidentifier

De volgende regels zijn van toepassing op sql_variant vergelijkingen:

  • Wanneer sql_variant waarden van verschillende basisgegevenstypen worden vergeleken en de basisgegevenstypen zich in verschillende gegevenstypefamilies bevinden, wordt de waarde waarvan de gegevenstypefamilie hoger is in de hiërarchiegrafiek beschouwd als de grotere van de twee waarden.
  • Wanneer sql_variant waarden van verschillende basisgegevenstypen worden vergeleken en de basisgegevenstypen zich in dezelfde gegevenstypefamilie bevinden, wordt de waarde waarvan het basisgegevenstype lager is in de hiërarchiegrafiek impliciet geconverteerd naar het andere gegevenstype en wordt de vergelijking vervolgens gemaakt.
  • Wanneer sql_variant waarden van het teken, varchar, ncharof nvarchar gegevenstypen worden vergeleken, worden de sorteringen eerst vergeleken op basis van de volgende criteria: LCID, LCID-versie, vergelijkingsvlagken en sorteer-id. Elk van deze criteria wordt vergeleken als gehele getallen en in de vermelde volgorde. Als al deze criteria gelijk zijn, worden de werkelijke tekenreekswaarden vergeleken volgens de sortering.

Sql_variant-gegevens converteren

Bij het verwerken van het sql_variant gegevenstype ondersteunt SQL Server impliciete conversies van objecten met andere gegevenstypen naar het sql_variant type. SQL Server biedt echter geen ondersteuning voor impliciete conversies van sql_variant gegevens naar een object met een ander gegevenstype.

Beperkingen

Hieronder ziet u de typen waarden die niet kunnen worden opgeslagen met behulp van sql_variant:

  • datetimeoffset1
  • geografie
  • geometrie
  • hierarchyid-
  • afbeelding
  • nvarchar(max)
  • rowversion (tijdstempel)
  • tekst
  • varchar(max)
  • varbinary(max)
  • Door de gebruiker gedefinieerde typen
  • xml--

1 SQL Server 2012 en hoger beperken datetimeoffset niet.

Voorbeelden

Een. Een sql_variant in een tabel gebruiken

In het volgende voorbeeld wordt een tabel gemaakt met een sql_variant gegevenstype. Vervolgens haalt het voorbeeld SQL_VARIANT_PROPERTY informatie op over de colA waarde 46279.1 waar colB =1689, gezien het feit dat tableAcolA van het type sql_variant en colBheeft.

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  

Dit is de resultatenset. Houd er rekening mee dat elk van deze drie waarden een sql_variantis.

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

B. Een sql_variant gebruiken als een variabele

In het volgende voorbeeld maakt u een variabele met behulp van het gegevenstype sql_variant en haalt u vervolgens SQL_VARIANT_PROPERTY informatie op over een variabele met de naam @v1.

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

Zie ook

CAST en CONVERTEREN (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)