Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe lo que se devuelve en los campos descriptor de parámetros de implementación (IPD) y descriptor de fila de implementación (IRD) para los tipos de datos de fecha y hora.
Información devuelta en campos IPD
La siguiente información se devuelve en los campos IPD:
| Tipo de parámetro | fecha | Tiempo | smalldatetime | fecha y 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_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 en IRD, datetime2 en IPD |
datetime en IRD, datetime2 en 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 | No disponible | No disponible | SQL_SS_TYPE_SMALLDATETIME | SQL_SS_TYPE_DATETIME | SQL_SS_TYPE_DEFAULT | No disponible |
A veces hay discontinuidades en intervalos de valores. Por ejemplo, falta 9 en 8.10..16. Esto se debe a la adición de un separador decimal cuando la precisión fraccionaria es mayor que cero.
datetime2 se devuelve como typename para smalldatetime y datetime porque el controlador lo usa como un tipo común para transmitir todos los SQL_TYPE_TIMESTAMP valores al servidor.
SQL_CA_SS_VARIANT_SQL_TYPE es un nuevo campo descriptor. Este campo se agregó a IRD e IPD para permitir que las aplicaciones especifiquen el tipo de valor asociado a sqlvariant (SQL_SSVARIANT) columnas y parámetros.
SQL_CA_SS_SERVER_TYPE es un nuevo campo de solo IPD para permitir que las aplicaciones controle cómo se envían los valores de los parámetros enlazados como SQL_TYPE_TYPETIMESTAMP (o como SQL_SS_VARIANT con un tipo C de SQL_C_TYPE_TIMESTAMP) al servidor. Si SQL_DESC_CONCISE_TYPE es SQL_TYPE_TIMESTAMP (o es SQL_SS_VARIANT y el tipo C es SQL_C_TYPE_TIMESTAMP) cuando se llama a SQLExecute o SQLExecDirect, el valor de SQL_CA_SS_SERVER_TYPE determina el tipo de flujo de datos tabular (TDS) del valor del parámetro, como se indica a continuación:
| 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 |
El valor predeterminado de SQL_CA_SS_SERVER_TYPE es SQL_SS_TYPE_DEFAULT. La configuración de SQL_DESC_PRECISION y SQL_DESC_LENGTH se valida con el valor de SQL_CA_SS_SERVER_TYPE tal como se describe en la tabla anterior. Si se produce un error en esta validación, se devuelve SQL_ERROR y se registra un registro de diagnóstico con SQLState 07006 y el mensaje "Infracción de atributo de tipo de datos restringido". Este error también se devuelve si SQL_CA_SS_SERVER_TYPE se establece en un valor distinto de SQL_SS_TYPE DEFAULT y DESC_CONCISE_TYPE no se SQL_TYPE_TIMESTAMP. Estas validaciones se realizan cuando se produce la validación de coherencia del descriptor, por ejemplo:
Cuando se cambia SQL_DESC_DATA_PTR.
En tiempo de preparación o ejecución (cuando se llama a SQLExecute, SQLExecDirect, SQLSetPos o SQLBulkOperations).
Cuando una aplicación fuerza una preparación no diferida mediante una llamada a SQLPrepare con preparación diferida deshabilitada o llamando a SQLNumResultCols, SQLDescribeCol o SQLDescribeParam para una instrucción preparada pero no ejecutada.
Cuando SQL_CA_SS_SERVER_TYPE se establece mediante una llamada a SQLSetDescField, su valor debe ser SQL_SS_TYPE_DEFAULT, SQL_SS_TYPE_SMALLDATETIME o SQL_SS_TYPE_DATETIME. Si no es así, se devuelve SQL_ERROR y se registra un registro de diagnóstico con SQLState HY092 y el mensaje "Identificador de atributo o opción no válidos".
Las aplicaciones que dependen de la funcionalidad admitida por datetime y smalldatetimepueden usar el atributo SQL_CA_SS_SERVER_TYPE , pero no datetime2. Por ejemplo, datetime2 requiere el uso de las dateadd funciones y datediif , mientras que datetime y smalldatetime también permiten operadores aritméticos. La mayoría de las aplicaciones no tendrán que usar este atributo y se debe evitar su uso.
Información devuelta en campos IRD
La siguiente información se devuelve en los campos IRD:
| Tipo de columna | fecha | Tiempo | smalldatetime | fecha y 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_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 |