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. |