sql_variant (Transact-SQL)

Tipo de datos que almacena valores de varios tipos de datos admitidos en SQL Server.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sql_variant

Notas

sql_variant puede utilizarse en columnas, parámetros, variables y valores devueltos de funciones definidas por el usuario. sql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datos.

Una columna de tipo sql_variant puede contener filas de tipos de datos diferentes. Por ejemplo, una columna definida como sql_variant puede almacenar valores int, binary y char. En la tabla siguiente se muestran los tipos de valores que no se pueden almacenar mediante sql_variant:

varchar(max)

varbinary(max)

nvarchar(max)

xml

text

ntext

image

timestamp

sql_variant

geography

hierarchyid

geometry

Tipos definidos por el usuario

sql_variant puede tener una longitud máxima de 8.016 bytes. Esto incluye la información y el valor de tipo base. La longitud máxima del tipo base real es 8.000 bytes.

Un tipo de datos sql_variant debe convertirse en su valor de tipo de datos base antes de poder tomar parte en operaciones como la adición y la sustracción.

Se puede asignar un valor predeterminado a sql_variant. Este tipo de datos también puede incluir NULL como valor subyacente, aunque estos valores NULL no dispondrán de un tipo base asociado. Además, sql_variant no puede tener otro sql_variant como su tipo base.

Una clave única, primaria o externa puede incluir columnas del tipo sql_variant, aunque la longitud total de los valores de datos que integran la clave de una fila determinada no debe superar la longitud máxima de un índice. Ésta es de 900 bytes.

Una tabla puede constar de cualquier número de columnas sql_variant.

No se puede utilizar sql_variant en CONTAINSTABLE y FREETEXTTABLE.

ODBC no es totalmente compatible con sql_variant. Por tanto, las columnas de consultas sql_variant se devuelven como datos binarios con el proveedor OLE DB de Microsoft para ODBC (MSDASQL). Por ejemplo, una columna sql_variant que contiene los datos de la cadena de caracteres 'PS2091' se devuelve como 0x505332303931.

Comparar los valores de sql_variant

El tipo de datos sql_variant pertenece a la parte superior de la lista de jerarquías de tipos de datos para conversión. En las comparaciones de sql_variant, el orden de la jerarquía del tipo de datos SQL Server se agrupa en familias de tipos de datos.

Jerarquía de tipo de datos

Familia de tipo de datos

sql_variant

sql_variant

datetime2

fecha y hora

datetimeoffset

Fecha y hora

datetime

fecha y hora

smalldatetime

fecha y hora

date

fecha y hora

time

fecha y hora

float

Valores numéricos aproximados

real

Valores numéricos aproximados

decimal

Valor numérico exacto

money

Valor numérico exacto

smallmoney

Valor numérico exacto

bigint

Valor numérico exacto

int

Valor numérico exacto

smallint

Valor numérico exacto

tinyint

Valor numérico exacto

bit

Valor numérico exacto

nvarchar

Unicode

nchar

Unicode

varchar

Unicode

char

Unicode

varbinary

Binario

binary

Binario

uniqueidentifier

Uniqueidentifier

Las comparaciones de sql_variant siguen estas reglas:

  • Cuando se comparan valores sql_variant de tipos de datos base distintos y los tipos de datos base están en familias de tipos de datos diferentes, el valor cuya familia de tipo de datos ocupa una posición superior en el gráfico de jerarquía se considera el mayor de los dos valores.

  • Cuando se comparan valores sql_variant de tipos de datos base distintos y los tipos de datos base están en la misma familia de tipos de datos, el valor cuyo tipo de datos base ocupa una posición inferior en el gráfico de jerarquía se convierte implícitamente al otro tipo de datos y, a continuación, se realiza la comparación.

  • Cuando se comparan valores sql_variant de los tipos de datos char, varchar, nchar o nvarchar, en primer lugar se comparan sus intercalaciones por los siguientes criterios: LCID, versión de LCID, marcadores de comparación e Id. de orden. Cada uno de estos criterios se compara como valores enteros y en el orden enumerado. Si todos estos criterios son iguales, se comparan los valores reales de las cadenas según la intercalación.

Vea también

Referencia

Conceptos