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.

Tabela de conversão de tipo de dados

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:

binary e varbinary (Transact-SQL)

datetime2 (Transact-SQL)

money e smallmoney (Transact-SQL)

bit (Transact-SQL)

datetimeoffset (Transact-SQL)

smalldatetime (Transact-SQL)

char e varchar (Transact-SQL)

decimal e numeric (Transact-SQL)

sql_variant (Transact-SQL)

data (Transact-SQL)

flutuante e real (Transact-SQL)

hora (Transact-SQL)

datetime (Transact-SQL)

int, bigint, smallint e tinyint (Transact-SQL)

uniqueidentifier (Transact-SQL)

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

Consulte também

Referência

Procedimentos armazenados de automação OLE (Transact-SQL)

CAST e CONVERT (Transact-SQL)

Tipos de dados (Transact-SQL)

COLLATE (Transact-SQL)