Compartilhar via


Conversões executadas do cliente para o servidor

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Baixar o driver do OLE DB

Este artigo descreve as conversões de data/hora executadas entre um aplicativo cliente escrito com o Driver do OLE DB para SQL Server 2008 (10.0.x) e versões posteriores.

Conversões

Este artigo 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, 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, datetimeou 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 a conversão de DBTIMESTAMP (datetime) em smalldatetime, o OLE DB Driver for SQL Server truncará silenciosamente o valor de segundos, em vez de acionar o erro DBSTATUS_E_DATAOVERFLOW.
11 O número de dígitos de segundo fracionário (a escala) é determinado pelo tamanho da coluna de destino, de acordo com a tabela abaixo. 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).
12 A semântica de conversão anterior ao SQL Server 2008 (10.0.x) 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 (10.0.x) 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 anterior ao SQL Server 2008 (10.0.x) para smalldatetime é mantida. Os segundos são definidos como zero.
15 A semântica de conversão anterior ao SQL Server 2008 (10.0.x) 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.
Type 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

Consulte Também

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