Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Datový typ, který ukládá hodnoty různých datových typů podporovaných SQL Serverem.
Syntax
sql_variant
Remarks
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 |
| datetime | Datum a čas |
| smalldatetime | Datum a čas |
| date | Datum a čas |
| time | Datum a čas |
| float | Přibližná numerika |
| real | Přibližná numerika |
| decimal | Přesná numerika |
| money | Přesná numerika |
| smallmoney | Přesná numerika |
| bigint | Přesná numerika |
| int | Přesná numerika |
| smallint | Přesná numerika |
| tinyint | Přesná numerika |
| bit | Přesná numerika |
| nvarchar | Unicode |
| nchar | Unicode |
| varchar | Unicode |
| char | Unicode |
| varbinary | Binary |
| binary | Binary |
| 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.
Restrictions
Následující seznam uvádí typy hodnot, které nelze uložit pomocí sql_variant:
- datetimeoffset1
- geography
- geometry
- hierarchyid
- image
- ntext
- nvarchar(max)
- Rowversion (časové razítko)
- text
- varchar(max)
- varbinary(max)
- Uživatelem definované typy
- xml
1 SQL Server 2012 a novější neomezují datetimeoffset.
Examples
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 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é
SQL_VARIANT_PROPERTY (Transact-SQL)