Partilhar via


Conversões executadas do cliente para o servidor

Este tópico descreve conversões de data/hora executadas entre um aplicativo cliente escrito com o OLE DB do SQL Server Native Client e o SQL Server 2008 (ou posterior).

Conversões

Este tópico descreve as conversões feitas no cliente. Se o cliente especificar a precisão de frações de segundo para um parâmetro diferente do definido no servidor, a conversão do cliente pode gerar uma falha, nos casos em que o servidor permitiria o êxito da operação. Em particular, o cliente trata qualquer truncamento de frações de segundo como um erro, enquanto o SQL Server arredonda valores de tempo para o segundo inteiro mais próximo.

Se ICommandWithParameters::SetParameterInfo não for chamado, as associações de DBTYPE_DBTIMESTAMP serão convertidas como se fossem datetime2.

Para ->

De

DBDATE (date)

DBTIME (time)

DBTIME2 (time)

DBTIMESTAMP (smalldatetime)

DBTIMESTAMP (datetime)

DBTIMESTAMP (datetime2)

DBTIMESTAMPOFFSET (datetimeoffset)

STR

WSTR

SQLVARIANT

(sql_variant)

DATE

1,2

1,3,4

4,12

1,12

1,12

1,12

1,5, 12

1,12

1,12

1,12

datetime2(0)

DBDATE

1

-

-

1,6

1,6

1,6

1,5, 6

1,10

1,10

1

date

DBTIME

-

1

1

1,7

1,7

1,7

1,5, 7

1,10

1,10

1

Time(0)

DBTIME2

-

1,3

1

1,7,10,14

1,7,10,15

1,7,10

1,5,7,10

1,10,11

1,10,11

1

Time(7)

DBTIMESTAMP

1,2

1,3,4

1,4,10

1,10,14

1,10,15

1,10

1,5,10

1,10,11

1,10,11

1,10

datetime2(7)

DBTIMESTAMPOFFSET

1,2,8

1,3,4,8

1,4,8,10

1,8,10,14

1,8,10,15

1,8,10

1,10

1,10,11

1,10,11

1,10

datetimeoffset(7)

FILETIME

1,2

1,3,4

1,4,13

1,13

1,13

1,13

1,5,13

1,13

1,10

1,13

datetime2(3)

BYTES

-

-

-

-

-

-

-

N/D

N/D

N/D

VARIANT

1

1

1

1,10

1,10

1,10

1,10

N/D

N/D

1,10

SSVARIANT

1,16

1,16

1,16

1,10,16

1,10,16

1,10,16

1,10,16

N/D

N/D

1,16

BSTR

1,9

1,9

1,9,10

1,9,10

1,9,10

1,9,10

1,9,10

N/D

N/D

N/D

STR

1,9

1,9

1,9,10

1,9,10

1,9,10

1,9,10

1,9,10

N/D

N/D

N/D

WSTR

1,9

1,9

1,9,10

1,9,10

1,9,10

1,9,10

1,9,10

N/D

N/D

N/D

Legenda dos símbolos

Símbolo

Significado

-

Não há suporte a nenhuma conversão. Se a associação for validada quando IAccessor::CreateAccessor for chamado, DBBINDSTATUS_UPSUPPORTEDCONVERSION será retornado em rgStatus. Quando a validação de acessador for adiada, DBSTATUS_E_BADACCESSOR será definido.

N/D

Não aplicável.

1

Se os dados fornecidos não forem válidos, DBSTATUS_E_CANTCONVERTVALUE será definido. Os dados de entrada são validados antes da aplicação das conversões; assim, mesmo quando um componente for ignorado por uma conversão subsequente, ele ainda deverá ser válido para que a conversão tenha êxito.

2

Os campos de hora são ignorados.

3

As frações de segundo devem ser zero ou DBSTATUS_E_DATAOVERFLOW será definido.

4

O componente de data é ignorado.

5

O fuso horário é definido com a configuração de fuso horário do cliente.

6

A hora é definida como zero.

7

A data é definida com a data atual.

8

A hora é convertida a UTC. Se ocorrer um erro durante essa conversão, DBSTATUS_E_CANTCONVERTVALUE será definido.

9

A cadeia de caracteres é analisada como um literal ISO e convertida para o tipo de destino. Se houver falha, a cadeia de caracteres será analisada como um literal de data OLE (que também tem componentes de hora) e convertida de uma data OLE (DBTYPE_DATE) para o tipo de destino.

Se o tipo de destino for DBTIMESTAMP, smalldatetime, datetime ou datetime2, a cadeia de caracteres deverá estar de acordo com a sintaxe de data, hora ou literais datetime2, ou com a sintaxe reconhecida pelo OLE. Se a cadeia de caracteres for um literal de data, todos os componentes de hora serão definidos como zero. Se a cadeia de caracteres for um literal de hora, a data será definida com a data atual.

Para todos os outros tipos de destino, a cadeia de caracteres deve estar de acordo com a sintaxe de literais do tipo de destino.

10

Se ocorrer o truncamento de frações de segundo com perda de dados, DBSTATUS_E_DATAOVERFLOW será definido. Para conversões de cadeia de caracteres, a verificação de estouro é possível somente quando a cadeia de caracteres estiver de acordo com a sintaxe ISO. Se a cadeia de caracteres for um literal de data OLE, as frações de segundo serão arredondadas.

Para conversão de DBTIMESTAMP (datetime) em smalldatetime, o SQL Server Native Client truncará silenciosamente o valor de segundos, em vez de gerar o erro DBSTATUS_E_DATAOVERFLOW.

11

O número de dígitos das frações de segundo (a escala) é determinado pelo tamanho da coluna de destino, de acordo com a seguinte tabela. Para tamanhos de coluna maiores que o intervalo na tabela, é implícita uma escala de 9. Essa conversão deve permitir até nove dígitos de frações de segundo, o máximo permitido pelo OLE DB.

Porém, se o tipo de origem for DBTIMESTAMP e as frações de segundo forem zero, não serão gerados dígitos de fração de segundo ou vírgulas decimais. Este comportamento assegura a compatibilidade com versões anteriores de aplicativos desenvolvidos usando provedores OLE DB mais antigos.

Um tamanho de coluna de ~ 0 implica em tamanho ilimitado no OLE DB (9 dígitos, a menos que a regra de 3 dígitos para DBTIMESTAMP se aplique).

Tipo

Comprimento (em caracteres)

Escala

DBTIME2

8, 10..18

0,1..9

DBTIMESTAMP

19, 21..29

0,1..9

DBTIMESTAMPOFFSET

26, 28..36

0,1..9

12

A semântica de conversão anterior ao SQL Server 2008 para DBTYPE_DATE é mantida. As frações de segundo são truncadas para zero.

13

A semântica de conversão anterior ao SQL Server 2008 para DBTYPE_FILETIME é mantida. Se você usar a API FileTimeToSystemTime do Windows, a precisão de frações de segundos estará limitada a 1 milissegundo.

14

A semântica de conversão anterior ao SQL Server 2008 para smalldatetime é mantida. Os segundos são definidos como zero.

15

A semântica de conversão anterior ao SQL Server 2008 para datetime é mantida. Os segundos são arredondados para o 300º de segundo mais próximo.

16

O comportamento de conversão de um valor (de um tipo determinado) inserido em uma estrutura cliente SSVARIANT é igual ao comportamento do mesmo valor e tipo quando não inserido em uma estrutura cliente SSVARIANT.

Consulte também

Conceitos

Associações e conversões (OLE DB)