Conversões de cliente nativo do SQL Server executadas de servidor para cliente
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics
Este tópico descreve as conversões de data/hora executadas entre o SQL Server 2008 (10.0.x) (ou posterior) e um aplicativo cliente escrito com o SQL Server Native Client OLE DB.
Conversões
A tabela a seguir descreve conversões entre o tipo retornado para o cliente e o tipo na associação. Para parâmetros de saída, se ICommandWithParameters::SetParameterInfo tiver sido chamado e o tipo especificado em pwszDataSourceType não corresponder ao tipo real no servidor, será executada uma conversão implícita pelo servidor, e o tipo retornado para o cliente corresponderá ao tipo especificado por meio de ICommandWithParameters::SetParameterInfo. Isso pode levar a resultados de conversão inesperados quando as regras de conversão do servidor são diferentes das descritas neste tópico. Por exemplo, quando é necessário fornecer uma data padrão, o SQL Server usa 1/1/1900 em vez de 30/12/1899.
Até -> De |
DATE | DBDATE | DBTIME | DBTIME2 | DBTIMESTAMP | DBTIMESTAMPOFFSET | FILETIME | BYTES | VARIANT | SSVARIANT | BSTR | STR | WSTR |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Data | 1,7 | OK | - | - | 1 | 1,3 | 1,7 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Hora | 5,6,7 | - | 9 | OK | 6 | 3,6 | 5,6 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Smalldatetime | 7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | OK | 4 | 4 |
Datetime | 5,7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | OK | 4 | 4 |
Datetime2 | 5,7 | 8 | 9,10 | 10 | 7 | 3 | 5,7 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Datetimeoffset | 5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | OK | 5,7,11 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Char, Varchar, Nchar, Nvarchar |
7, 13 | 12 | 12,9 | 12 | 12 | 12 | 7,13 | N/D | N/D | N/D | N/D | N/D | N/D |
Sql_variant (datetime) |
7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | OK | 4 | 4 |
Sql_variant (smalldatetime) |
7 | 8 | 9,10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | OK | 4 | 4 |
Sql_variant (date) |
1,7 | OK | 2 | 2 | 1 | 1,3 | 1,7 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Sql_variant (time) |
5,6,7 | 2 | 6 | OK | 6 | 3,6 | 5,6 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Sql_variant (datetime2) |
5,7 | 8 | 9,10 | 10 | OK | 3 | 5,7 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Sql_variant (datetimeoffset) |
5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | OK | 5,7,11 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Legenda dos símbolos
Símbolo | Significado |
---|---|
OK | Nenhuma conversão é necessária. |
- | 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. |
1 | Os campos de hora são definidos como zero. |
2 | DBSTATUS_E_CANTCONVERTVALUE é definido. |
3 | O fuso horário é definido como zero. |
4 | Se o buffer do cliente não suficientemente grande, DBSTATUS_S_TRUNCATED será definido. Quando o tipo de servidor inclui frações de segundo, o número de dígitos na cadeia de caracteres de resultado corresponde exatamente à escala do tipo de servidor. |
5 | O truncamento de segundos ou de frações de segundo é ignorado. |
6 | A data é definida como a data atual, a menos que a origem seja uma literal de hora da cadeia de caracteres e o destino seja DBTYPE_DATE. Nesse caso, será usado 30/12/1899. |
7 | Se o valor alagar, DBSTATUS_E_DATAOVERFLOW será definido. |
8 | Os campos de hora são ignorados. |
9 | Os campos de frações de segundo são ignorados. |
10 | O componente de data é ignorado. |
11 | A hora é convertida para o fuso horário do cliente. Se ocorrer um erro durante essa conversão, DBSTATUS_E_DATAOVERFLOW será definido. |
12 | 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. A cadeia de caracteres deverá se conformar com a sintaxe para literais do tipo de destino permitido para que a análise do formato ISO tenha êxito. Para que a análise de OLE tenha êxito, a cadeia de caracteres deve se conformar com a sintaxe reconhecida pelo OLE. Se não for possível analisar a cadeia de caracteres, DBSTATUS_E_CANTCONVERTVALUE será definido. Se qualquer valor de componente estiver fora do intervalo, DBSTATUS_E_DATAOVERFLOW será definido. |
13 | 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. A cadeia de caracteres deve se conformar com a sintaxe de literais datetime, a menos que o destino seja DBTYPE_DATE ou DBTYPE_DBTIMESTAMP. Se for o caso, um literal datetime ou time será permitido para que a análise de formato ISO tenha êxito. Para que a análise de OLE tenha êxito, a cadeia de caracteres deve se conformar com a sintaxe reconhecida pelo OLE. Se não for possível analisar a cadeia de caracteres, DBSTATUS_E_CANTCONVERTVALUE será definido. Se qualquer valor de componente estiver fora do intervalo, DBSTATUS_E_DATAOVERFLOW será definido. |