Sdílet prostřednictvím


sql_variant (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed InstanceSQL Database v Microsoft Fabric

Datový typ, který ukládá hodnoty různých datových typů podporovaných SQL Serverem.

Transact-SQL konvence syntaxe

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, ncharnebo nvarchar 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ě colA46279.1, kde colB =1689vzhledem k tomu, že tableAcolA 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é

CAST a CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)