Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve o que é retornado nos campos IPD (descritor de parâmetro de implementação) e DESCRITOR de Linha de Implementação (IRD) para tipos de dados de data e hora.
Informações retornadas em campos IPD
As seguintes informações são retornadas nos campos IPD:
| Tipo de parâmetro | data | Hora | smalldatetime | Data e hora | `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_TIPO_TIMESTAMP | SQL_TIPO_TIMESTAMP | SQL_TIPO_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 | vinte e três | 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 | vinte e três | 19, 21..27 | 26, 28..34 |
| SQL_DESC_OCTET_LENGTH | 6 | 12 | 4 | oito | 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_TIPO_TIMESTAMP | SQL_TIPO_TIMESTAMP | SQL_TIPO_TIMESTAMP | SQL_SS_TIMESTAMPOFFSET |
| SQL_CA_SS_SERVER_TYPE | Não aplicável | Não aplicável | SQL_SS_TYPE_SMALLDATETIME | SQL_SS_TYPE_DATETIME | SQL_SS_TYPE_DEFAULT | Não aplicável |
Às vezes, há descontinuidades 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 o nome do tipo e smalldatetimedatetime porque o driver usa isso como um tipo comum para transmitir todos os SQL_TYPE_TIMESTAMP valores para o servidor.
SQL_CA_SS_VARIANT_SQL_TYPE é um novo campo de descritor. Esse campo foi adicionado ao IRD e ao IPD para permitir que os aplicativos especifiquem o tipo de valor associado sqlvariant a colunas e parâmetros (SQL_SSVARIANT)
SQL_CA_SS_SERVER_TYPE é um novo campo somente IPD para permitir que os aplicativos controlem como os valores dos 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. Se SQL_DESC_CONCISE_TYPE for SQL_TYPE_TIMESTAMP (ou for SQL_SS_VARIANT e o tipo C for SQL_C_TYPE_TIMESTAMP) quando SQLExecute ou SQLExecDirect for chamado, o valor de SQL_CA_SS_SERVER_TYPE determinará o tipo de fluxo de dados tabular (TDS) do valor do parâmetro, da seguinte maneira:
| 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 | vinte e três | 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 descrito na tabela acima. Se essa validação falhar, SQL_ERROR será retornado e um registro de diagnóstico será registrado com o SQLState 07006 e a mensagem "Violação restrita do atributo de tipo de dados". Esse erro também será retornado se SQL_CA_SS_SERVER_TYPE estiver definido como um valor diferente de SQL_SS_TYPE DEFAULT e DESC_CONCISE_TYPE não for 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.
Em tempo de preparação ou 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 desabilitada 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, seu valor deve ser SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME ou SQL_SS_TYPE_DATETIME. Se esse não for o caso, SQL_ERROR será retornado e um registro de diagnóstico será registrado 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 com suporte datetime e smalldatetime, mas não datetime2. Por exemplo, datetime2 requer o uso das dateadd funções e datediif , enquanto datetime que 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 em campos IRD
As seguintes informações são retornadas nos campos IRD:
| Tipo de coluna | data | Hora | smalldatetime | Data e hora | `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_TIPO_TIMESTAMP | SQL_TIPO_TIMESTAMP | SQL_TIPO_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 | vinte e três | 19, 21..27 | 26, 28..34 |
| SQL_DESC_DISPLAY_SIZE | 10 | 8,10..16 | 16 | vinte e três | 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 | oito | 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 |