Comportamento de tipos de data e hora aprimorados com versões anteriores do SQL Server (ODBC)
Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)
Este tópico descreve o comportamento esperado quando um aplicativo cliente que usa recursos avançados de data e hora se comunica com uma versão do SQL Server anterior a SQL Server 2008 (10.0.x) e quando um aplicativo cliente usando componentes do Microsoft Data Access, componentes do Windows Data Access ou uma versão do SQL Server Native Client anterior SQL Server 2008 (10.0.x) envia comandos para um servidor que dá suporte a recursos avançados de data e hora.
Comportamento do cliente de versão anterior
Os aplicativos cliente que foram compilados usando uma versão do SQL Server Native Client antes do SQL Server 2008 (10.0.x) veem os novos tipos de data/hora como colunas nvarchar. O conteúdo da coluna são as representações literais, conforme descrito na seção "Formatos de dados: cadeias de caracteres e literais" do Suporte de tipo de dados para melhorias de data e hora ODBC. O tamanho da coluna é o comprimento de literal máximo para a precisão de segundos fracionários especificada da coluna.
As APIs de catálogo retornarão metadados consistentes com o código de tipo de dados de versão anterior retornado ao cliente (por exemplo, nvarchar) e a representação de versão anterior associada (por exemplo, o formato de literal apropriado). No entanto, o nome do tipo de dados retornado será o nome de tipo real SQL Server 2008 (10.0.x).
Os metadados de instrução retornados por SQLDescribeCol, SQLDescribeParam, SQGetDescField e SQLColAttribute retornarão metadados consistentes com o tipo de nível inferior em todos os aspectos, incluindo o nome do tipo. Um exemplo desse tipo de nível inferior é nvarchar.
Quando um aplicativo cliente de nível inferior é executado em um servidor SQL Server 2008 (10.0.x) (ou posterior) no qual o esquema é alterado para tipos de data/hora, o comportamento esperado é o seguinte:
Tipo SQL Server 2005 | SQL Server 2008 (10.0.x) (ou posterior) Tipo | Tipo de cliente ODBC | Conversão do resultado (de SQL para C) | Conversão do parâmetro (de C para SQL) |
---|---|---|---|---|
Datetime | Data | SQL_C_TYPE_DATE | OK | OK (1) |
SQL_C_TYPE_TIMESTAMP | Campos de hora definidos como zero. | OK (2) Falha se o campo de hora for diferente de zero. Funciona com SQL Server 2005 (9.x). |
||
Time(0) | SQL_C_TYPE_TIME | OK | OK (1) | |
SQL_C_TYPE_TIMESTAMP | Campos de data definidos como a data atual. | OK (2) Data ignorada. Falhará se os segundos fracionários forem diferentes de zero. Funciona com SQL Server 2005 (9.x). |
||
Time(7) | SQL_C_TIME | Falha – literal de tempo inválido. | OK (1) | |
SQL_C_TYPE_TIMESTAMP | Falha – literal de tempo inválido. | OK (1) | ||
Datetime2(3) | SQL_C_TYPE_TIMESTAMP | OK | OK (1) | |
Datetime2(7) | SQL_C_TYPE_TIMESTAMP | OK | Valor será arredondado para 1/300º segundo por conversão de cliente. | |
Smalldatetime | Data | SQL_C_TYPE_DATE | OK | OK |
SQL_C_TYPE_TIMESTAMP | Campos de hora definidos como zero. | OK (2) Falha se o campo de hora for diferente de zero. Funciona com SQL Server 2005 (9.x). |
||
Time(0) | SQL_C_TYPE_TIME | OK | OK | |
SQL_C_TYPE_TIMESTAMP | Campos de data definidos como a data atual. | OK (2) Data ignorada. Falha se os segundos fracionários forem diferentes de zero. Funciona com SQL Server 2005 (9.x). |
||
Datetime2(0) | SQL_C_TYPE_TIMESTAMP | OK | OK |
Legenda dos símbolos
Símbolo | Significado |
---|---|
1 | Se funcionou com SQL Server 2005 (9.x), ele deve continuar a trabalhar com uma versão mais recente do SQL Server. |
2 | Um aplicativo que funcionou com SQL Server 2005 (9.x) pode falhar com uma versão mais recente do SQL Server. |
Observe que só foram consideradas alterações de esquema comuns. A seguir estão as alterações comuns:
Usar um novo tipo em que logicamente um aplicativo exige somente um valor de data ou hora. Entretanto, o aplicativo foi obrigado a usar datetime ou smalldatetime devido à falta de tipos de data e hora separados.
Usar um novo tipo para obter precisão ou exatidão adicional de frações de segundos.
Trocar para datetime2 porque esse é o tipo de dados de data e hora preferido.
Metadados de coluna retornados por SQLColumns, SQLProcedureColumns e SQLSpecialColumns
Os valores de coluna a seguir são retornados para tipos de data/hora:
Tipo de coluna | date | time | smalldatetime | DATETIME | datetime2 | datetimeoffset |
---|---|---|---|---|---|---|
DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_WVARCHAR | SQL_WVARCHAR |
TYPE_NAME | date | time | smalldatetime | DATETIME | datetime2 | datetimeoffset |
COLUMN_SIZE | 10 | 8,10..16 | 16 | 23 | 19, 21..27 | 26, 28..34 |
BUFFER_LENGTH | 20 | 16, 20..32 | 16 | 16 | 38, 42..54 | 52, 56..68 |
DECIMAL_DIGITS | NULO | NULO | 0 | 3 | NULO | NULO |
SQL_DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_DATETIME | SQL_DATETIME | SQL_WVARCHAR | SQL_WVARCHAR |
SQL_DATETIME_SUB | NULO | NULO | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | NULO | NULO |
CHAR_OCTET_LENGTH | NULO | NULO | NULO | NULO | NULO | NULO |
SS_DATA_TYPE | 0 | 0 | 111 | 111 | 0 | 0 |
SQLSpecialColumns não retorna SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH ou SS_DATA_TYPE.
Metadados de tipo de dados retornados por SQLGetTypeInfo
Os valores de coluna a seguir são retornados para tipos de data/hora:
Tipo de coluna | date | time | smalldatetime | DATETIME | datetime2 | datetimeoffset |
---|---|---|---|---|---|---|
TYPE_NAME | date | time | smalldatetime | DATETIME | datetime2 | datetimeoffset |
DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_WVARCHAR | SQL_WVARCHAR |
COLUMN_SIZE | 10 | 16 | 16 | 23 | 27 | 34 |
LITERAL_PREFIX | ' | ' | ' | ' | ' | ' |
LITERAL_SUFFIX | ' | ' | ' | ' | ' | ' |
CREATE_PARAMS | NULO | NULO | NULO | NULO | NULO | NULO |
NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE | SQL_NULLABLE |
CASE_SENSITIVE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE | SQL_PRED_SEARCHABLE |
UNSIGNED_ATTRIBUTE | NULO | NULO | NULO | NULO | NULO | NULO |
FXED_PREC_SCALE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE | SQL_FALSE |
AUTO_UNIQUE_VALUE | NULO | NULO | NULO | NULO | NULO | NULO |
LOCAL_TYPE_NAME | date | time | smalldatetime | DATETIME | datetime2 | datetimeoffset |
MINIMUM_SCALE | NULO | NULO | 0 | 3 | NULO | NULO |
MAXIMUM_SCALE | NULO | NULO | 0 | 3 | NULO | NULO |
SQL_DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_DATETIME | SQL_DATETIME | SQL_WVARCHAR | SQL_WVARCHAR |
SQL_DATETIME_SUB | NULO | NULO | SQL_CODE_TIMESTAMP | SQL_CODE_TIMESTAMP | NULO | NULO |
NUM_PREC_RADIX | NULO | NULO | NULO | NULO | NULO | NULO |
INTERVAL_PRECISION | NULO | NULO | NULO | NULO | NULO | NULO |
USERTYPE | 0 | 0 | 12 | 22 | 0 | 0 |
Comportamento de servidor de versão anterior
Quando conectado a uma instância de servidor de uma versão anterior que SQL Server 2008 (10.0.x), qualquer tentativa de usar os novos tipos de servidor ou códigos de metadados associados e campos de descritor resultará no retorno de SQL_ERROR. Um registro de diagnóstico será gerado com SQLSTATE HY004 e a mensagem "Tipo de dados SQL inválido para a versão do servidor na conexão" ou com 07006 e "Violação do atributo de tipo de dados restrito".
Consulte Também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de