Metadados - Parâmetro e Resultado

Aplica-se a: SQL ServerBase de Dados SQL do AzureAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)

Este tópico descreve o que é devolvido nos campos de descritor de parâmetro de implementação (IPD) e descritor de linha de implementação (IRD) para tipos de dados de data e hora.

Informação Devolvida nos Campos IPD

A seguinte informação é devolvida nos campos IPD:

Tipo de parâmetro date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_CASE_SENSITIVE (sensível a maiúsculas e minúsculas) SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
Precisão do Intervalo de Data/Hora em SQL 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_TYPE SQL_TYPE_DATE SQL_SS_TYPE_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET
SQL_DESC_TYPE_NAME date time smalldatetime no IRD, datetime2 no IPD datetime no IRD, datetime2 no IPD datetime2 datetimeoffset
SQL_CA_SS_VARIANT_TYPE SQL_C_TYPE_DATE SQL_C_TYPE_BINARY SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_TIMESTAMP SQL_C_TYPE_BINARY
SQL_CA_SS_VARIANT_SQL_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_CA_SS_SERVER_TYPE N/A N/A SQL_SS_TYPE_SMALLDATETIME SQL_SS_TYPE_DATETIME SQL_SS_TYPE_DEFAULT N/A

Por vezes há descontinuidades nos intervalos de valor. Por exemplo, falta 9 em 8, 10... 16. Isto deve-se à adição de um ponto decimal quando a precisão fracionada é superior a zero.

datetime2 é devolvido como nome de tipo para smalldatetime e datetime porque o driver usa este tipo comum para transmitir todos os valores de SQL_TYPE_TIMESTAMP ao servidor.

SQL_CA_SS_VARIANT_SQL_TYPE é um campo de descrição novo. Este campo foi adicionado ao IRD e IPD para permitir que as aplicações especifiquem o tipo de valor associado às colunas e parâmetros sqlvariant (SQL_SSVARIANT)

SQL_CA_SS_SERVER_TYPE é um novo campo exclusivo para IPD que permite às aplicações controlar como os valores para parâmetros ligados como SQL_TYPE_TYPETIMESTAMP (ou como SQL_SS_VARIANT com SQL_C_TYPE_TIMESTAMP tipo C) são enviados para o servidor. Se SQL_DESC_CONCISE_TYPE for SQL_TYPE_TIMESTAMP (ou for SQL_SS_VARIANT e o tipo C for SQL_C_TYPE_TIMESTAMP) quando é chamado SQLExecute ou SQLExecDirect, o valor de SQL_CA_SS_SERVER_TYPE determina o tipo de fluxo de dados tabulares (TDS) do valor do parâmetro, da seguinte forma:

Valor da SQL_CA_SS_SERVER_TYPE Valores válidos para SQL_DESC_PRECISION Valores válidos para SQL_DESC_LENGTH Tipo TDS
SQL_SS_TYPE_DEFAULT 0..7 19, 21..27 datetime2
SQL_SS_TYPE_SMALLDATETIME 0 19 smalldatetime
SQL_SS_TYPE_DATETIME 3 23 datetime

A configuração padrão de SQL_CA_SS_SERVER_TYPE é SQL_SS_TYPE_DEFAULT. As definições de SQL_DESC_PRECISION e SQL_DESC_LENGTH são validadas com a configuração de SQL_CA_SS_SERVER_TYPE conforme descrito na tabela acima. Se esta validação falhar, SQL_ERROR é devolvido e um registo de diagnóstico é registado com SQLState 07006 e a mensagem "Violação do atributo do tipo de dado restrito". Este erro também é devolvido se SQL_CA_SS_SERVER_TYPE for definido para um valor diferente de SQL_SS_TYPE DEFAULT e DESC_CONCISE_TYPE não for SQL_TYPE_TIMESTAMP. Estas validações são realizadas quando ocorre validação de consistência de descritores, por exemplo:

  • Quando SQL_DESC_DATA_PTR for alterado.

  • No momento de preparar ou executar (quando é chamado SQLExecute, SQLExecDirect, SQLSetPos ou SQLBulkOperations).

  • Quando uma aplicação força um preparar não diferido ao chamar SQLPrepare com o prepare diferido desativado, ou ao chamar SQLNumResultCols, SQLDescribeCol ou SQLDescribeParam para uma instrução que está preparada mas não executada.

Quando SQL_CA_SS_SERVER_TYPE é definido por uma chamada para SQLSetDescField, o seu valor deve ser SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME ou SQL_SS_TYPE_DATETIME. Se não for o caso, SQL_ERROR é devolvido e um registo de diagnóstico é registado com SQLState HY092 e a mensagem "Invalid attribute/option identifier".

O atributo SQL_CA_SS_SERVER_TYPE pode ser usado por aplicações que dependem da funcionalidade suportada por datetime e smalldatetime, mas não por datetime2. Por exemplo, o datetime2 requer a utilização das funções dateadd e datediif , enquanto datetime e smalldatetime também permitem operadores aritméticos. A maioria das aplicações não precisará de usar este atributo e o seu uso deve ser evitado.

Informação Devolvida em Campos IRD

A seguinte informação é devolvida nos campos IRD:

Tipo de coluna date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_AUTO_UNIQUE_VALUE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CASE_SENSITIVE (sensível a maiúsculas e minúsculas) SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_CONCISE_TYPE SQL_TYPE_DATE SQL_SS_TIME2 SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_TYPE_TIMESTAMP SQL_SS_TIMESTAMPOFFSET
SQL_DESC_DATETIME_INTERVAL_CODE SQL_CODE_DATE 0 SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP SQL_CODE_TIMESTAMP 0
Precisão do Intervalo de Data/Hora em SQL 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_DISPLAY_SIZE 10 8,10..16 16 23 19, 21..27 26, 28..34
SQL_DESC_FIXED_PREC_SCALE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE SQL_FALSE
SQL_DESC_LENGTH 10 8,10..16 16 2 19, 21..27 26, 28..34
SQL_DESC_LITERAL_PREFIX ' ' ' ' ' '
SQL_DESC_LITERAL_SUFFIX ' ' ' ' ' '
SQL_DESC_LOCAL_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_OCTET_LENGTH 6 12 4 8 16 20
SQL_DESC_PRECISION 0 0..7 0 3 0..7 0..7
SQL_DESC_SCALE 0 0..7 0 3 0..7 0..7
SQL_DESC_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE SQL_PRED_SEARCHABLE
SQL_DESC_TYPE SQL_DATETIME SQL_SS_TIME2 SQL_DATETIME SQL_DATETIME SQL_DATETIME SQL_SS_TIMESTAMPOFFSET
SQL_DESC_TYPE_NAME date time smalldatetime datetime datetime2 datetimeoffset
SQL_DESC_UNSIGNED SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE SQL_TRUE

Ver também

Metadados (ODBC)