Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Um tipo de dados que armazena valores de vários tipos de dados com suporte do SQL Server.
Transact-SQL convenções de sintaxe
Syntax
sql_variant
Remarks
sql_variant pode ser usado em colunas, parâmetros, variáveis e os valores de retorno de funções definidas pelo usuário. sql_variant permite que esses objetos de banco de dados ofereçam suporte a valores de outros tipos de dados.
Uma coluna do tipo sql_variant pode conter linhas de diferentes tipos de dados. Por exemplo, uma coluna definida como sql_variant pode armazenar int, binário e valores de char.
sql_variant pode ter um comprimento máximo de 8016 bytes. Isso inclui as informações do tipo base e o valor do tipo base. O comprimento máximo do valor real do tipo base é de 8.000 bytes.
Um tipo de dados sql_variant deve primeiro ser convertido em seu valor de tipo de dados base antes de participar de operações como adição e subtração.
sql_variant pode ser atribuído um valor padrão. Esse tipo de dados também pode ter NULL como seu valor subjacente, mas os valores NULL não terão um tipo de base associado. Além disso, sql_variant não pode ter outro sql_variant como seu tipo base.
Uma chave exclusiva, primária ou estrangeira pode incluir colunas do tipo sql_variant, mas o comprimento total dos valores de dados que compõem a chave de uma linha específica não deve ser superior ao comprimento máximo de um índice. Isto é de 900 bytes.
Uma tabela pode ter qualquer número de sql_variant colunas.
sql_variant não pode ser usado em CONTAINSTABLE e FREETEXTTABLE.
ODBC não suporta totalmente sql_variant. Portanto, consultas de colunas de sql_variant são retornadas como dados binários quando você usa o Microsoft OLE DB Provider for ODBC (MSDASQL). Por exemplo, uma coluna sql_variant que contém os dados da cadeia de caracteres 'PS2091' é retornada como 0x505332303931.
Comparando sql_variant valores
O tipo de dados sql_variant pertence à parte superior da lista de hierarquia de tipos de dados para conversão. Para comparações sql_variant, a ordem da hierarquia de tipos de dados do SQL Server é agrupada em famílias de tipos de dados.
| Hierarquia de tipos de dados | Família de tipos de dados |
|---|---|
| sql_variant | sql_variant |
| datetime2 | Data e hora |
| datetimeoffset | Data e hora |
| datetime | Data e hora |
| smalldatetime | Data e hora |
| date | Data e hora |
| time | Data e hora |
| float | Numérico aproximado |
| real | Numérico aproximado |
| decimal | Numérico exato |
| money | Numérico exato |
| smallmoney | Numérico exato |
| bigint | Numérico exato |
| int | Numérico exato |
| smallint | Numérico exato |
| tinyint | Numérico exato |
| bit | Numérico exato |
| nvarchar | Unicode |
| nchar | Unicode |
| varchar | Unicode |
| char | Unicode |
| varbinary | Binary |
| binary | Binary |
| uniqueidentifier | Uniqueidentifier |
As seguintes regras aplicam-se às comparações sql_variant:
- Quando sql_variant valores de diferentes tipos de dados de base são comparados e os tipos de dados de base estão em famílias de tipos de dados diferentes, o valor cuja família de tipos de dados é maior no gráfico de hierarquia é considerado o maior dos dois valores.
- Quando sql_variant valores de diferentes tipos de dados de base são comparados e os tipos de dados de base estão na mesma família de tipos de dados, o valor cujo tipo de dados base é menor no gráfico de hierarquia é implicitamente convertido para o outro tipo de dados e a comparação é então feita.
- Quando sql_variant valores dos tipos de dados char, varchar, ncharou nvarchar são comparados, seus agrupamentos são primeiro comparados com base nos seguintes critérios: LCID, versão LCID, sinalizadores de comparação e ID de classificação. Cada um desses critérios é comparado como valores inteiros e na ordem listada. Se todos esses critérios forem iguais, os valores reais da cadeia de caracteres serão comparados de acordo com o agrupamento.
Convertendo dados sql_variant
Ao manipular o tipo de dados sql_variant, o SQL Server oferece suporte a conversões implícitas de objetos com outros tipos de dados para o tipo sql_variant. No entanto, o SQL Server não oferece suporte a conversões implícitas de sql_variant dados para um objeto com outro tipo de dados.
Restrictions
A seguir estão listados os tipos de valores que não podem ser armazenados usando sql_variant:
- datetimeoffset1
- geography
- geometry
- hierarchyid
- image
- ntext
- nvarchar(max)
- Rowversion (carimbo temporal)
- text
- varchar(max)
- varbinary(max)
- Tipos definidos pelo usuário
- xml
1 SQL Server 2012 e superior não restringem datetimeoffset.
Examples
A. Usando um sql_variant em uma tabela
O exemplo a seguir cria uma tabela com um tipo de dados sql_variant. Em seguida, o exemplo recupera SQL_VARIANT_PROPERTY informações sobre o valor colA46279.1 onde colB =1689, dado que tableA tem colA do tipo sql_variant e 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
Aqui está o conjunto de resultados. Observe que cada um desses três valores é um sql_variant.
Base Type Precision Scale
--------- --------- -----
decimal 8 2
(1 row(s) affected)
B. Usando um sql_variant como variável
O exemplo a seguir cria uma variável usando o tipo de dados sql_variant e, em seguida, recupera SQL_VARIANT_PROPERTY informações sobre uma variável chamada @v1.
DECLARE @v1 sql_variant;
SET @v1 = 'ABC';
SELECT @v1;
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');
Consulte também
CAST e CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)