Partilhar via


Parâmetro e metadados de resultado

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

Informações retornadas nos campos IPD

As seguintes informações são retornadas nos campos IPD:

Tipo de parâmetro

date

time

smalldatetime

datetime

datetime2

datetimeoffset

SQL_DESC_CASE_SENSITIVE

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

SQL_DESC_DATETIME_INTERVAL_PRECISION

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 em IRD, datetime2 em IPD

datetime em IRD, datetime2 em 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/D

N/D

SQL_SS_TYPE_SMALLDATETIME

SQL_SS_TYPE_DATETIME

SQL_SS_TYPE_DEFAULT

N/D

Às vezes, há descontinuações em intervalos de valores. Por exemplo, 9 está ausente em 8,10.. 16. Isso se deve à adição de um ponto decimal quando a precisão fracionária é maior que zero.

datetime2 é retornado como typename para smalldatetime e datetime porque o driver usa esse tipo como um mesmo tipo para transmitir todos os valores SQL_TYPE_TIMESTAMP para o servidor.

SQL_CA_SS_VARIANT_SQL_TYPE é um novo campo descritor. Esse campo foi adicionado a IRD e IPD para permitir que os aplicativos especifiquem o tipo de valor associado a colunas e parâmetros sqlvariant (SQL_SSVARIANT)

SQL_CA_SS_SERVER_TYPE é um novo campo somente IPD que permite aos aplicativos controlar como os valores de parâmetros associados como SQL_TYPE_TYPETIMESTAMP (ou como SQL_SS_VARIANT com um tipo C de SQL_C_TYPE_TIMESTAMP) são enviados para o servidor. Caso SQL_DESC_CONCISE_TYPE seja SQL_TYPE_TIMESTAMP (ou seja SQL_SS_VARIANT e o tipo C seja SQL_C_TYPE_TIMESTAMP) quando SQLExecute ou SQLExecDirect é chamado, o valor de SQL_CA_SS_SERVER_TYPE determina o tipo do protocolo TDS do valor de parâmetro da seguinte forma:

Valor de SQL_CA_SS_SERVER_TYPE

Valores válidos para SQL_DESC_PRECISION

Valores válidos para SQL_DESC_LENGTH

Tipo de 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 configurações de SQL_DESC_PRECISION e SQL_DESC_LENGTH são validadas com a configuração de SQL_CA_SS_SERVER_TYPE, conforme descrição na tabela acima. Caso essa validação falhe, SQL_ERROR é retornado, e um registro de diagnóstico é feito com SQLState 07006 e a mensagem "Violação do atributo de tipo de dados restrito". Esse erro também é retornado caso SQL_CA_SS_SERVER_TYPE seja definido como um valor diferente de SQL_SS_TYPE DEFAULT e DESC_CONCISE_TYPE não seja SQL_TYPE_TIMESTAMP. Essas validações são executadas quando ocorre a validação de consistência do descritor. Por exemplo:

  • Quando SQL_DESC_DATA_PTR é alterado.

  • No momento da preparação ou da execução (quando SQLExecute, SQLExecDirect, SQLSetPos ou SQLBulkOperations é chamado).

  • Quando um aplicativo força uma preparação não adiada chamando SQLPrepare com a preparação adiada habilitada, ou chamando SQLNumResultCols, SQLDescribeCol ou SQLDescribeParam para uma instrução preparada, mas não executada.

Quando SQL_CA_SS_SERVER_TYPE é definido por uma chamada para SQLSetDescField, o valor deve ser SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME ou SQL_SS_TYPE_DATETIME. Caso não seja esse o caso, SQL_ERROR é retornado, e um registro de diagnóstico é feito com SQLState HY092 e a mensagem "Identificador de atributo/opção inválido".

O atributo SQL_CA_SS_SERVER_TYPE pode ser usado por aplicativos que dependem da funcionalidade para a qual datetime e smalldatetime oferecem suporte, mas não datetime2. Por exemplo, datetime2 exige o uso das funções dateadd e datediif, e datetime e smalldatetime também permitem operadores aritméticos. A maioria dos aplicativos não precisará usar esse atributo, e seu uso deve ser evitado.

Informações retornadas nos campos IRD

As seguintes informações são retornadas 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

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

SQL_DESC_DATETIME_INTERVAL_PRECISION

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

Consulte também

Conceitos