Conversão de tipo de dados (Mecanismo de Banco de Dados)
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, eles podem ser convertidos de um tipo de dados de um objeto em um tipo de dados de outro objeto.
Quando os dados de uma coluna de resultado, um código de retorno ou um parâmetro de saída Transact-SQL são movidos para uma variável de programa, os dados devem ser convertidos de tipo de dados do sistema SQL Server em tipo de dados da variável.
Ao fazer a conversão entre uma variável de aplicativo e uma coluna de conjunto de resultados, um código de retorno, um parâmetro ou um marcador de parâmetro 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 ao usuário. O SQL Server converte automaticamente os dados de um tipo de dados em outro. Por exemplo, quando smallint é comparado com int, o smallint é convertido implicitamente em int antes de prosseguir com a comparação.
O GETDATE() implicitamente converte para estilo de datas 0. O SYSDATETIME() implicitamente converte para estilo de datas 21.
As conversões explícitas usam as funções CAST 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 em outro. Por exemplo, a seguinte função CAST converte o valor numérico de $157.27 em uma cadeia de caracteres de '157.27':
CAST ( $157.27 AS VARCHAR(10) )
Use CAST em vez de CONVERT se quiser que o código do programa Transact-SQL esteja de acordo com ISO. Use CONVERT em vez de CAST para se beneficiar da funcionalidade de estilo de CONVERT.
A ilustração a seguir mostra todas as conversões de tipos de dados explícitas e implícitas que são permitidas para tipos de dados fornecidos pelo sistema SQL Server. Os tipos incluem xml, bigint e sql_variant. Não há nenhuma conversão implícita na atribuição do tipo de dados sql_variant, mas há conversão implícita em sql_variant.
Comportamentos de conversão de tipo de dados
Algumas conversões de tipo de dados implícitas e explícitas não têm suporte quando você está convertendo o tipo de dados de um objeto SQL Server em outro. Por exemplo, um valor nchar não pode ser convertido em um valor image. Um valor nchar só pode ser convertido em binary usando uma conversão explícita; uma conversão implícita em binary não tem suporte. Entretanto, um valor nchar pode ser convertido explícita ou implicitamente em nvarchar.
Os tópicos a seguir descrevem os comportamentos de conversão exibidos pelos tipos de dados correspondentes:
Convertendo 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 Visual Basic, os procedimentos armazenados de 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, text, nvarchar, ntext |
String |
decimal, numeric |
String |
bit |
Boolean |
binary, varbinary, image |
Matriz Byte() unidimensional |
int |
Long |
smallint |
Integer |
tinyint |
Byte |
float |
Double |
real |
Single |
money, smallmoney |
Currency |
datetime, smalldatetime |
Date |
Tudo definido como NULL |
Variant definido como nulo |
Todos os valores únicos do SQL Server são convertidos a um único valor Visual Basic com exceção de valores binary, varbinary e image. Esses valores são convertidos em uma matriz Byte() unidimensional em Visual Basic. Essa matriz tem um intervalo de Byte(0 a length1), onde length é o número de bytes nos valores SQL Serverbinary, varbinary ou image.
Estas são as conversões de tipos de dados Visual Basic para tipos de dados SQL Server.
Tipo de dados do Visual Basic |
Tipo de dados do SQL Server |
---|---|
Long, Integer, Byte, Boolean, Object |
int |
Double, Single |
float |
Currency |
money |
Date |
datetime |
String com 4000 caracteres ou menos |
varchar/nvarchar |
String com mais de 4000 caracteres |
text/ntext |
Matriz Byte() unidimensional com 8000 bytes ou menos |
varbinary |
Matriz Byte() unidimensional com mais de 8000 bytes |
image |