sql_variant (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
SQL Database v Microsoft Fabric
Datový typ, který ukládá hodnoty různých datových typů podporovaných SQL Serverem.
Syntax
sql_variant
Poznámky
sql_variant lze použít ve sloupcích, parametrech, proměnných a návratových hodnotách uživatelem definovaných funkcí. sql_variant umožňuje těmto databázovým objektům podporovat hodnoty jiných datových typů.
Sloupec typu sql_variant může obsahovat řádky různých datových typů. Například sloupec definovaný jako sql_variant může ukládat int, binárnía hodnoty znaku.
sql_variant může mít maximální délku 8016 bajtů. To zahrnuje informace o základním typu i hodnotu základního typu. Maximální délka skutečné hodnoty základního typu je 8 000 bajtů.
Datový typ sql_variant musí být před účastí v operacích, jako je sčítání a odčítání, nejprve přetypovat na hodnotu základního datového typu.
sql_variant lze přiřadit výchozí hodnotu. Tento datový typ může mít také hodnotu NULL jako její základní hodnotu, ale hodnoty NULL nebudou mít přidružený základní typ. sql_variant také nemůže mít jiný sql_variant jako základní typ.
Jedinečný, primární nebo cizí klíč může obsahovat sloupce typu sql_variant, ale celková délka datových hodnot, které tvoří klíč konkrétního řádku, by neměla být větší než maximální délka indexu. Toto je 900 bajtů.
Tabulka může mít libovolný počet sql_variant sloupců.
sql_variant nelze použít v CONTAINSTABLE a FREETEXTTABLE.
ROZHRANÍ ODBC plně nepodporuje sql_variant. Dotazy sql_variant sloupců se proto vrátí jako binární data při použití zprostředkovatele Microsoft OLE DB pro ROZHRANÍ ODBC (MSDASQL). Například sloupec sql_variant, který obsahuje data řetězce znaků PS2091, se vrátí jako 0x505332303931.
Porovnání hodnot sql_variant
Datový typ sql_variant patří do horní části seznamu hierarchie datových typů pro převod. Pro porovnání sql_variant je pořadí hierarchie datových typů SQL Serveru seskupené do rodin datových typů.
Hierarchie datových typů | Řada datových typů |
---|---|
sql_variant | sql_variant |
datetime2 | Datum a čas |
datetimeoffset | Datum a čas |
data a času | Datum a čas |
smalldatetime | Datum a čas |
datum | Datum a čas |
čas | Datum a čas |
plovoucí | Přibližná číselná hodnota |
skutečné | Přibližná číselná hodnota |
desetinných míst | Přesná číselná hodnota |
peněz | Přesná číselná hodnota |
malé | Přesná číselná hodnota |
bigint | Přesná číselná hodnota |
int | Přesná číselná hodnota |
malé | Přesná číselná hodnota |
tinyint | Přesná číselná hodnota |
bitová | Přesná číselná hodnota |
nvarchar | Unicode |
nchar | Unicode |
varchar | Unicode |
znaku |
Unicode |
varbinární | Binární |
binární |
Binární |
uniqueidentifier | Uniqueidentifier |
Pro porovnání sql_variant platí následující pravidla:
- Při porovnání sql_variant hodnot různých základních datových typů a základní datové typy jsou v různých rodinách datových typů, je hodnota, jejíž řada datových typů je v hierarchickém grafu vyšší, považována za větší ze dvou hodnot.
- Při porovnání sql_variant hodnot různých základních datových typů a základní datové typy jsou ve stejné rodině datových typů, hodnota, jejíž základní datový typ je v hierarchickém grafu implicitně převeden na druhý datový typ a pak se provede porovnání.
- Při
sql_variant hodnotychar , varchar ,nchar nebonvarchar datové typy, jejich kolace se nejprve porovnávají na základě následujících kritérií: LCID, verze LCID, porovnávací příznaky a ID řazení. Každé z těchto kritérií se porovnává jako celočíselné hodnoty a v uvedeném pořadí. Pokud jsou všechna tato kritéria rovna, skutečné řetězcové hodnoty se porovnávají podle kolace.
Převod dat sql_variant
Při zpracování datového typu sql_variant SQL Server podporuje implicitní převody objektů s jinými datovými typy na typ sql_variant. SQL Server však nepodporuje implicitní převody z sql_variant dat na objekt s jiným datovým typem.
Omezení
Následující seznam uvádí typy hodnot, které nelze uložit pomocí sql_variant:
- datetimeoffset1
- zeměpisu
- geometrie
- hierarchie
- obrázku
- textu
- nvarchar(max)
- rowversion (časové razítko)
- textové
- varchar(max)
- varbinary(max)
- Uživatelem definované typy
- xml
1 SQL Server 2012 a novější neomezují datetimeoffset.
Příklady
A. Použití sql_variant v tabulce
Následující příklad vytvoří tabulku s datovým typem sql_variant. Potom příklad načte SQL_VARIANT_PROPERTY
informace o hodnotě colA
46279.1
, kde colB
=1689
vzhledem k tomu, že tableA
má colA
typu sql_variant
a colB
.
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
Tady je sada výsledků. Všimněte si, že každá z těchto tří hodnot je sql_variant.
Base Type Precision Scale
--------- --------- -----
decimal 8 2
(1 row(s) affected)
B. Použití sql_variant jako proměnné
Následující příklad vytvoří proměnnou pomocí datového typu sql_variant a potom načte SQL_VARIANT_PROPERTY
informace o proměnné s názvem @v1.
DECLARE @v1 sql_variant;
SET @v1 = 'ABC';
SELECT @v1;
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');
Viz také