sql_variant (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-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 tableA
colA
van het type sql_variant
en colB
heeft.
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)