Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Typ danych, który przechowuje wartości różnych typów danych obsługiwanych przez program SQL Server.
Transact-SQL konwencje składni
Syntax
sql_variant
Remarks
sql_variant można używać w kolumnach, parametrach, zmiennych i zwracanych wartościach funkcji zdefiniowanych przez użytkownika. sql_variant umożliwia tym obiektom bazy danych obsługę wartości innych typów danych.
Kolumna typu sql_variant może zawierać wiersze różnych typów danych. Na przykład kolumna zdefiniowana jako
sql_variant może mieć maksymalną długość 8016 bajtów. Obejmuje to zarówno informacje o typie podstawowym, jak i wartość typu podstawowego. Maksymalna długość rzeczywistego typu podstawowego wynosi 8000 bajtów.
Przed udziałem w operacjach, takich jak dodawanie i odejmowanie, należy najpierw rzutować sql_variant typ danych na wartość podstawowego typu danych.
sql_variant można przypisać wartość domyślną. Ten typ danych może również mieć wartość NULL jako wartość bazową, ale wartości NULL nie będą miały skojarzonego typu podstawowego. Ponadto sql_variant nie może mieć innego sql_variant jako typu podstawowego.
Unikatowy, podstawowy lub obcy klucz może zawierać kolumny typu sql_variant, ale łączna długość wartości danych tworzących klucz określonego wiersza nie powinna być większa niż maksymalna długość indeksu. Jest to 900 bajtów.
Tabela może zawierać dowolną liczbę kolumn sql_variant.
sql_variant nie można używać w tabelach CONTAINSTABLE i FREETEXTTABLE.
OdBC nie obsługuje w pełni sql_variant. W związku z tym zapytania dotyczące kolumn sql_variant są zwracane jako dane binarne podczas korzystania z dostawcy Microsoft OLE DB dla ODBC (MSDASQL). Na przykład kolumna sql_variant zawierająca dane ciągu znaków "PS2091" jest zwracana jako 0x505332303931.
Porównywanie wartości sql_variant
Typ danych sql_variant należy do górnej części listy hierarchii typów danych na potrzeby konwersji. W przypadku porównań sql_variant kolejność hierarchii typów danych programu SQL Server jest pogrupowana w rodziny typów danych.
| Hierarchia typów danych | Rodzina typów danych |
|---|---|
| sql_variant | sql_variant |
| datetime2 | Data i godzina |
| datetimeoffset | Data i godzina |
| datetime | Data i godzina |
| smalldatetime | Data i godzina |
| date | Data i godzina |
| time | Data i godzina |
| float | Przybliżona numeryka |
| real | Przybliżona numeryka |
| decimal | Dokładna liczba |
| money | Dokładna liczba |
| smallmoney | Dokładna liczba |
| bigint | Dokładna liczba |
| int | Dokładna liczba |
| smallint | Dokładna liczba |
| tinyint | Dokładna liczba |
| bit | Dokładna liczba |
| nvarchar | Unicode |
| nchar | Unicode |
| varchar | Unicode |
| char | Unicode |
| varbinary | Binary |
| binary | Binary |
| uniqueidentifier | Uniqueidentifier |
Następujące reguły dotyczą porównań sql_variant:
- Gdy sql_variant wartości różnych podstawowych typów danych są porównywane, a podstawowe typy danych znajdują się w różnych rodzinach typów danych, wartość, której rodzina typów danych jest wyższa na wykresie hierarchii, jest uważana za większą z dwóch wartości.
- Gdy sql_variant wartości różnych podstawowych typów danych są porównywane, a podstawowe typy danych znajdują się w tej samej rodzinie typów danych, wartość, której podstawowy typ danych jest niższy na wykresie hierarchii, jest niejawnie konwertowany na inny typ danych, a następnie jest wykonywane porównanie.
- Gdy
sql_variant wartościchar , varchar ,nchar lubnvarchar typy danych są porównywane, ich sortowania są najpierw porównywane na podstawie następujących kryteriów: LCID, wersja LCID, LCID, flagi porównania i identyfikator sortowania. Każde z tych kryteriów jest porównywane jako wartości całkowite i w podanej kolejności. Jeśli wszystkie te kryteria są równe, rzeczywiste wartości ciągu są porównywane zgodnie z sortowaniem.
Konwertowanie danych sql_variant
W przypadku obsługi typu danych sql_variant program SQL Server obsługuje niejawne konwersje obiektów z innymi typami danych na typ sql_variant. Jednak program SQL Server nie obsługuje niejawnych konwersji z sql_variant danych do obiektu z innym typem danych.
Restrictions
Poniżej wymieniono typy wartości, których nie można przechowywać przy użyciu sql_variant:
- datetimeoffset1
- geography
- geometry
- hierarchyid
- image
- ntext
- nvarchar(max)
- Wersja wiersza (znacznik czasu)
- text
- varchar(max)
- varbinary(max)
- Typy zdefiniowane przez użytkownika
- xml
1 PROGRAMU SQL Server 2012 i nowszych nie ograniczają datetimeoffset.
Examples
A. Używanie sql_variant w tabeli
W poniższym przykładzie zostanie utworzona tabela z typem danych sql_variant. Następnie przykład pobiera SQL_VARIANT_PROPERTY informacje o wartości colA46279.1 gdzie colB =1689, biorąc pod uwagę, że tableA ma colA typu sql_variant i 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
Oto zestaw wyników. Należy pamiętać, że każda z tych trzech wartości jest sql_variant.
Base Type Precision Scale
--------- --------- -----
decimal 8 2
(1 row(s) affected)
B. Używanie sql_variant jako zmiennej
Poniższy przykład tworzy zmienną przy użyciu typu danych sql_variant, a następnie pobiera SQL_VARIANT_PROPERTY informacje o zmiennej o nazwie @v1.
DECLARE @v1 sql_variant;
SET @v1 = 'ABC';
SELECT @v1;
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');
Zobacz także
RZUTOWANIE i konwertowanie (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)