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
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Os tipos de dados podem ser convertidos nos seguintes cenários:
- Quando os dados de um objeto são movidos, comparados ou combinados com dados de outro objeto, os dados podem ter que ser convertidos do tipo de dados de um objeto para o tipo de dados do outro.
- Quando os dados de uma coluna de resultado Transact-SQL, código de retorno ou parâmetro de saída são movidos para uma variável de programa, os dados devem ser convertidos do tipo de dados do sistema SQL Server para o tipo de dados da variável.
Quando você converte entre uma variável de aplicativo e uma coluna, código de retorno, parâmetro ou marcador de parâmetro do conjunto de resultados do SQL Server, as conversões de tipo de dados com suporte são definidas pela API do banco de dados.
Conversão implícita e explícita
Os tipos de dados podem ser convertidos implícita ou explicitamente.
As conversões implícitas não são visíveis para o usuário. O SQL Server converte automaticamente os dados de um tipo de dados para outro. Por exemplo, quando um smallint é comparado a um int, o smallint é implicitamente convertido em int antes que a comparação prossiga.
GETDATE() converte implicitamente para o estilo de data0.
SYSDATETIME() converte implicitamente para o estilo 21de data.
As conversões explícitas usam as CAST funções ou CONVERT .
As funções CAST e CONVERT convertem um valor (uma variável local, uma coluna ou outra expressão) de um tipo de dados para outro. Por exemplo, a função a seguir CAST converte o valor numérico de em uma cadeia de $157.27 caracteres de '157.27':
CAST ( $157.27 AS VARCHAR(10) )
Use CAST em vez de CONVERT se quiser que Transact-SQL código do programa esteja em conformidade com a ISO. Use CONVERT em vez de CAST aproveitar a funcionalidade de estilo no CONVERT.
A ilustração a seguir mostra todas as conversões de tipo de dados explícitas e implícitas permitidas para tipos de dados fornecidos pelo sistema SQL Server. Estes incluem xml, bigint e sql_variant. Não há conversão implícita na atribuição do tipo de dados sql_variant , mas há conversão implícita para sql_variant.
Embora o gráfico anterior ilustre todas as conversões explícitas e implícitas permitidas no SQL Server, ele não indica o tipo de dados resultante da conversão.
- Quando o SQL Server executa uma conversão explícita, a própria instrução determina o tipo de dados resultante.
- Para conversões implícitas, instruções de atribuição, como definir o valor de uma variável ou inserir um valor em uma coluna, resultam no tipo de dados que foi definido pela declaração de variável ou definição de coluna.
- Para operadores de comparação ou outras expressões, o tipo de dados resultante depende das regras de precedência do tipo de dados.
Como exemplo, o script a seguir define uma variável do tipo varchar, atribui um valor de tipo int à variável e, em seguida, seleciona uma concatenação da variável com uma cadeia de caracteres.
DECLARE @string VARCHAR(10);
SET @string = 1;
SELECT @string + ' is a string.'
O valor int de 1 é convertido em um varchar, portanto, a SELECT instrução retorna o valor 1 is a string..
O exemplo a seguir mostra um script semelhante com uma variável int :
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + ' is not a string.'
Nesse caso, a SELECT instrução lança o seguinte erro:
Msg 245, Level 16, State 1, Line 3
Conversion failed when converting the varchar value ' is not a string.' to data type int.
Para avaliar a expressão @notastring + ' is not a string.', o SQL Server segue as regras de precedência do tipo de dados para concluir a conversão implícita antes que o resultado da expressão possa ser calculado. Como int tem uma precedência maior do que varchar, o SQL Server tenta converter a cadeia de caracteres em um inteiro e falha porque essa cadeia de caracteres não pode ser convertida em um inteiro. Se a expressão fornecer uma cadeia de caracteres que pode ser convertida, a instrução terá êxito, como no exemplo a seguir:
DECLARE @notastring INT;
SET @notastring = '1';
SELECT @notastring + '1'
Nesse caso, a cadeia de caracteres 1 pode ser convertida para o valor 1inteiro , portanto, esta SELECT instrução retorna o valor 2. O + operador torna-se adição em vez de concatenação quando os tipos de dados fornecidos são inteiros.
Comportamentos de conversão de tipo de dados
Algumas conversões de tipo de dados implícitas e explícitas não são suportadas quando você está convertendo o tipo de dados de um objeto do SQL Server em outro. Por exemplo, um valor nchar não pode ser convertido em um valor de imagem . Um nchar só pode ser convertido em binário usando a conversão explícita. Uma conversão implícita para binário não é suportada. No entanto, um nchar pode ser explícita ou implicitamente convertido em nvarchar.
Os artigos a seguir descrevem os comportamentos de conversão exibidos por seus tipos de dados correspondentes:
- binário e varbinary
- datetime2
- dinheiro e dinheiro pequeno
- bit
- datetimeoffset
- smalldatetime
- char e varchar
- decimal e numérico
- sql_variant
- date
- flutuador e real
- time
- datetime
- int, bigint, smallint e tinyint
- uniqueidentifier
- xml
- json
Converter tipos de dados usando procedimentos armazenados de automação OLE
Como o SQL Server usa tipos de dados Transact-SQL e a Automação OLE usa tipos de dados do Visual Basic, os procedimentos armazenados da Automação OLE devem converter os dados que passam entre eles.
A tabela a seguir descreve as conversões de tipo de dados do SQL Server para Visual Basic.
| Tipo de dados do SQL Server | Tipo de dados do Visual Basic |
|---|---|
| char, varchar, texto, nvarchar, ntext | String |
| decimal, numérico | String |
| bit | Boolean |
| binário, varbinário, imagem | Matriz unidimensional Byte() |
| int | Long |
| smallint | Integer |
| tinyint | Byte |
| float | Double |
| real | Single |
| dinheiro, dinheiro pequeno | Currency |
| Hora do encontro, PequenoEncontroHora | Date |
Qualquer coisa definida para NULL |
Variante definida como Nula |
Todos os valores únicos do SQL Server são convertidos em um único valor do Visual Basic, exceto para valores binários, varbinários e de imagem . Esses valores são convertidos em uma matriz unidimensional Byte() no Visual Basic. Essa matriz tem um intervalo em Byte( 0 to length 1) que length é o número de bytes nos valores binário, varbinary ou image do SQL Server.
Essas são as conversões de tipos de dados do Visual Basic para tipos de dados do SQL Server.
| Tipo de dados do Visual Basic | Tipo de dados do SQL Server |
|---|---|
| Longo, Inteiro, Byte, Booleano, Objeto | int |
| Duplo, Simples | float |
| Currency | money |
| Date | datetime |
| String com 4.000 caracteres ou menos | Varchar/nvarchar |
| String com mais de 4.000 caracteres | Texto/ntexto |
Matriz unidimensional Byte() com 8.000 bytes ou menos |
varbinary |
Matriz unidimensional Byte() com mais de 8.000 bytes |
image |