Tipos CLR grandes definidos por el usuario (ODBC)

En este tema se describen los cambios realizados en ODBC en SQL Server Native Client para admitir tipos definidos por el usuario (UDT) de Common Language Runtime (CLR) grandes.

Para obtener más información acerca de la compatibilidad con tipos UDT CLR grandes en SQL Server Native Client, vea Tipos definidos por el usuario de CLR grandes.

Formato de datos

SQL Server Native Client usa SQL_SS_LENGTH_UNLIMITED para indicar que el tamaño de una columna es superior a 8.000 bytes para los tipos de objeto grandes (LOB). A partir de SQL Server 2008, se usa el mismo valor para los tipos UDT CLR cuando su tamaño es superior a 8.000 bytes.

Los valores UDT se representan como matrices de bytes. Se admiten conversiones a cadenas hexadecimales y desde cadenas hexadecimales. Los valores literales se representan como cadenas hexadecimales con el prefijo "0x".

En la tabla siguiente se muestra la asignación de tipos de datos en parámetros y conjuntos de resultados:

Tipo de datos SQL Server

Tipo de datos SQL

Valor

UDT CLR

SQL_SS_UDT

-151 (sqlncli.h)

En la tabla siguiente se describe la estructura y el tipo C de ODBC correspondiente. Esencialmente, un tipo UDT CLR es un tipo varbinary con metadatos adicionales.

Tipo de datos SQL

Diseño de memoria

Tipo de datos C

Valor (sqlext.h)

SQL_SS_UDT

SQLCHAR *(char sin signo *)

SQL_C_BINARY

SQL_BINARY (-2)

Campos descriptores de parámetros

La información que se devuelve en los campos IPD es la siguiente:

Campo descriptor

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_DESC_CASE_SENSITIVE

SQL_FALSE

SQL_FALSE

SQL_DESC_CONCISE_TYPE

SQL_SS_UDT

SQL_SS_UDT

SQL_DESC_DATETIME_INTERVAL_CODE

0

0

SQL_DESC_DATETIME_INTERVAL_PRECISION

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_FIXED_PREC_SCALE

SQL_FALSE

SQL_FALSE

SQL_DESC_LENGTH

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_LOCAL_TYPE_NAME

"udt"

"udt"

SQL_DESC_OCTET_LENGTH

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_PRECISION

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_SCALE

0

0

SQL_DESC_TYPE

SQL_SS_UDT

SQL_SS_UDT

SQL_DESC_TYPE_NAME

"udt"

"udt"

SQL_DESC_UNSIGNED

SQL_TRUE

SQL_TRUE

SQL_CA_SS_UDT_CATALOG_NAME

Nombre del catálogo que contiene el UDT.

Nombre del catálogo que contiene el UDT.

SQL_CA_SS_UDT_SCHEMA_NAME

Nombre del esquema que contiene el UDT.

Nombre del esquema que contiene el UDT.

SQL_CA_SS_UDT_TYPE_NAME

Nombre del UDT.

Nombre del UDT.

SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME

Nombre completo del UDT.

Nombre completo del UDT.

Para los parámetros UDT, SQL_CA_SS_UDT_TYPE_NAME debe establecerse siempre a través de SQLSetDescField. SQL_CA_SS_UDT_CATALOG_NAME y SQL_CA_SS_UDT_SCHEMA_NAME son opcionales.

Si el UDT se define en la misma base de datos con un esquema distinto que la tabla, debe establecerse SQL_CA_SS_UDT_SCHEMA_NAME.

Si el UDT se define en una base de datos distinta que la tabla, deben establecerse SQL_CA_SS_UDT_CATALOG_NAME y SQL_CA_SS_UDT_SCHEMA_NAME.

Si hay algún error u omisión en los valores de SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME o SQL_CA_SS_UDT_SCHEMA_NAME, se genera un registro de diagnóstico con SQLSTATE HY000 y el texto de mensaje específico del servidor.

Campos descriptores de resultados

La información que se devuelve en los campos IRD es la siguiente:

Campo descriptor

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_DESC_AUTO_UNIQUE_VALUE

SQL_FALSE

SQL_FALSE

SQL_DESC_CASE_SENSITIVE

SQL_FALSE

SQL_FALSE

SQL_DESC_CONCISE_TYPE

SQL_SS_UDT

SQL_SS_UDT

SQL_DESC_DATETIME_INTERVAL_CODE

0

0

SQL_DESC_DATETIME_INTERVAL_PRECISION

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_DISPLAY_SIZE

2n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_FIXED_PREC_SCALE

SQL_FALSE

SQL_FALSE

SQL_DESC_LENGTH

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_LITERAL_PREFIX

"0x"

"0x"

SQL_DESC_LITERAL_SUFFIX

""

""

SQL_DESC_LOCAL_TYPE_NAME

"udt"

"udt"

SQL_DESC_OCTET_LENGTH

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_PRECISION

n

SQL_SS_LENGTH_UNLIMITED (0)

SQL_DESC_SCALE

0

0

SQL_DESC_SEARCHABLE

SQL_PRED_NONE

SQL_PRED_NONE

SQL_DESC_TYPE

SQL_SS_UDT

SQL_SS_UDT

SQL_DESC_TYPE_NAME

"udt"

"udt"

SQL_DESC_UNSIGNED

SQL_TRUE

SQL_TRUE

SQL_CA_SS_UDT_CATALOG_NAME

Nombre del catálogo que contiene el UDT.

Nombre del catálogo que contiene el UDT.

SQL_CA_SS_UDT_SCHEMA_NAME

Nombre del esquema que contiene el UDT.

Nombre del esquema que contiene el UDT.

SQL_CA_SS_UDT_TYPE_NAME

Nombre del UDT.

Nombre del UDT.

SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME

Nombre completo del UDT.

Nombre completo del UDT.

Para los UDT se devuelven los siguientes valores de columna:

Nombre de la columna

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

DATA_TYPE

SQL_SS_UDT

SQL_SS_UDT

TYPE_NAME

Nombre del UDT.

Nombre del UDT.

COLUMN_SIZE

n

SQL_SS_LENGTH_UNLIMITED (0)

BUFFER_LENGTH

n

SQL_SS_LENGTH_UNLIMITED (0)

DECIMAL_DIGITS

NULL

NULL

SQL_DATA_TYPE

SQL_SS_UDT

SQL_SS_UDT

SQL_DATETIME_SUB

NULL

NULL

CHAR_OCTET_LENGTH

n

SQL_SS_LENGTH_UNLIMITED (0)

SS_UDT_CATALOG_NAME

Nombre del catálogo que contiene el UDT.

Nombre del catálogo que contiene el UDT.

SS_UDT_SCHEMA_NAME

Nombre del esquema que contiene el UDT.

Nombre del esquema que contiene el UDT.

SS_UDT_ASSEMBLY_TYPE_NAME

Nombre completo del UDT.

Nombre completo del UDT.

Las últimas tres columnas son columnas específicas del controlador. Se agregan después de cualquier columna definida por ODBC, pero antes que cualquier columna específica del controlador del conjunto de resultados de SQLColumns o SQLProcedureColumns.

SQLGetTypeInfo no devuelve ninguna fila para los UDT individuales ni para el tipo genérico "udt".

Enlaces y conversiones

Las conversiones compatibles de tipos de datos SQL a C son las siguientes:

Conversión a y desde:

SQL_SS_UDT

SQL_C_WCHAR

Compatible *

SQL_C_BINARY

Compatible

SQL_C_CHAR

Compatible *

* Los datos binarios se convierten en una cadena hexadecimal.

Las conversiones compatibles de tipos de datos C a SQL son las siguientes:

Conversión a y desde:

SQL_SS_UDT

SQL_C_WCHAR

Compatible *

SQL_C_BINARY

Compatible

SQL_C_CHAR

Compatible *

* Las cadenas hexadecimales se convierten en datos binarios.

Compatibilidad de SQL_VARIANT con los UDT

Los UDT no se admiten en columnas SQL_VARIANT.

Compatibilidad de BCP con los UDT

Los valores UDT pueden importarse y exportarse sólo como valores de caracteres o binarios.

Comportamiento del cliente de nivel inferior en los UDT

Los UDT están sujetos a la asignación de tipos con clientes de nivel inferior, tal y como se indica a continuación:

Versión del servidor

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL Server 2000

varbinary

image

SQL Server 2005

UDT

varbinary(max)

SQL Server 2008

UDT

UDT

Funciones ODBC compatibles con UDT CLR grandes

En esta sección se describen los cambios realizados en las funciones ODBC de SQL Server Native Client para admitir UDT CLR grandes.

SQLBindCol

Los valores de las columnas de resultados UDT se convierten de tipos de datos SQL a C, tal y como se describía en la sección "Enlaces y conversiones" anteriormente en este tema.

SQLBindParameter

Los valores requeridos para los UDT son los siguientes:

Tipo de datos SQL

Parametertype

ColumnSizePtr

DecimalDigitsPtr

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

n

0

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_SS_UDT

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLColAttribute

Los valores devueltos para los UDT son los que se describían en la sección "Campos descriptores de resultados" anteriormente en este tema.

SQLColumns

Los valores devueltos para los UDT son los que se describían en la sección "Metadatos de columna devueltos por SQLColumns y SQLProcedureColumns (metadatos de catálogo)" anteriormente en este tema.

SQLDescribeCol

Los valores devueltos para los UDT son los siguientes:

Tipo de datos SQL

DataTypePtr

ColumnSizePtr

DecimalDigitsPtr

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

n

0

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_SS_UDT

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLDescribeParam

Los valores devueltos para los UDT son los siguientes:

Tipo de datos SQL

DataTypePtr

ColumnSizePtr

DecimalDigitsPtr

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

n

0

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_SS_UDT

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLFetch

Los valores de las columnas de resultados UDT se convierten de tipos de datos SQL a C, tal y como se describía en la sección "Enlaces y conversiones" anteriormente en este tema.

SQLFetchScroll

Los valores de las columnas de resultados UDT se convierten de tipos de datos SQL a C, tal y como se describía en la sección "Enlaces y conversiones" anteriormente en este tema.

SQLGetData

Los valores de las columnas de resultados UDT se convierten de tipos de datos SQL a C, tal y como se describía en la sección "Enlaces y conversiones" anteriormente en este tema.

SQLGetDescField

Los campos descriptores disponibles con los nuevos tipos se describen en las secciones "Campos descriptores de parámetros" y "Campos descriptores de resultados" anteriormente en este tema.

SQLGetDescRec

Los valores devueltos para los UDT son los siguientes:

Tipo de datos SQL

Tipo

Subtipo

Longitud

Precisión

Escala

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

0

n

n

0

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_SS_UDT

0

SQL_SS_LENGTH_UNLIMITED (0)

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLGetTypeInfo

Los valores devueltos para los UDT son los que se describían en la sección "Metadatos de columna devueltos por SQLColumns y SQLProcedureColumns (metadatos de catálogo)" anteriormente en este tema.

SQLProcedureColumns

Los valores devueltos para los UDT son los que se describían en la sección "Metadatos de columna devueltos por SQLColumns y SQLProcedureColumns (metadatos de catálogo)" anteriormente en este tema.

SQLPutData

Los valores de parámetros UDT se convierten de tipos de datos C a SQL, tal y como se describía en la sección "Enlaces y conversiones" anteriormente en este tema.

SQLSetDescField

El campo descriptor disponible con los nuevos tipos se describe en las secciones "Campos descriptores de parámetros" y "Campos descriptores de resultados" anteriormente en este tema.

SQLSetDescRec

Los valores que se permiten para los UDT son los siguientes:

Tipo de datos SQL

Tipo

Subtipo

Longitud

Precisión

Escala

SQL_SS_UDT

(longitud menor o igual a 8.000 bytes)

SQL_SS_UDT

0

n

n

0

SQL_SS_UDT

(longitud mayor que 8.000 bytes)

SQL_SS_UDT

0

SQL_SS_LENGTH_UNLIMITED (0)

SQL_SS_LENGTH_UNLIMITED (0)

0

SQLSpecialColumns

Los valores devueltos para las columnas de los UDT DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH y UDT DECIMAL_DIGTS son los que se describían en la sección "Metadatos devueltos por SQLColumns y SQLProcedureColumns (metadatos de catálogo)" anteriormente en este tema.