Compartilhar 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 SQL Server Native Client OLE DB e 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 segundos fracionários como um erro, enquanto o SQL Server arredonda os valores temporais para o segundo inteiro mais próximo.

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

Até ->

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 SQL Server Native Client truncará silenciosamente o valor de segundos em vez de gerar o erro de 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 do que o intervalo na tabela, é sugerida 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).

DBTIME2 - 8, 10..18 (comprimento em caracteres); 0, 1..9 (escala)

DBTIMESTAMP - 19, 21..29 (comprimento em caracteres); 0, 1..9 (escala)

DBTIMESTAMPOFFSET - 26, 28..36 (comprimento em caracteres); 0, 1..9 (escala)
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 segundos fracionários estará limitada a 1 milissegundo.
14 A semântica de conversão antes de SQL Server 2008 para smalldatetime é mantida. Os segundos são definidos como zero.
15 A semântica de conversão antes de 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

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