sql_variant (Transact-SQL)sql_variant (Transact-SQL)

SE APLICA A: síSQL Server (a partir de 2008) síAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Tipo de datos que almacena valores de varios tipos de datos admitidos en SQL ServerSQL Server.A data type that stores values of various SQL ServerSQL Server-supported data types.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

sql_variant  

NotasRemarks

sql_variant puede usarse en columnas, parámetros, variables y los valores devueltos de las funciones definidas por el usuario.sql_variant can be used in columns, parameters, variables, and the return values of user-defined functions. sql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datos.sql_variant enables these database objects to support values of other data types.

Una columna de tipo sql_variant puede contener filas de tipos de datos diferentes.A column of type sql_variant may contain rows of different data types. Por ejemplo, una columna definida como sql_variant puede almacenar valores int, binario y char.For example, a column defined as sql_variant can store int, binary, and char values.

sql_variant puede tener una longitud máxima de 8016 bytes.sql_variant can have a maximum length of 8016 bytes. Esto incluye la información y el valor de tipo base.This includes both the base type information and the base type value. La longitud máxima del tipo base real es 8.000 bytes.The maximum length of the actual base type value is 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.A sql_variant data type must first be cast to its base data type value before participating in operations such as addition and subtraction.

Se puede asignar un valor predeterminado a sql_variant.sql_variant can be assigned a default value. Este tipo de datos también puede incluir NULL como valor subyacente, aunque estos valores NULL no dispondrán de un tipo base asociado.This data type can also have NULL as its underlying value, but the NULL values will not have an associated base type. Además, sql_variant no puede tener otro sql_variant como su tipo base.Also, sql_variant cannot have another sql_variant as its base type.

Una clave única, primaria o externa puede incluir columnas de 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.A unique, primary, or foreign key may include columns of type sql_variant, but the total length of the data values that make up the key of a specific row should not be more than the maximum length of an index. Ésta es de 900 bytes.This is 900 bytes.

Una tabla puede constar de cualquier número de columnas sql_variant.A table can have any number of sql_variant columns.

No se puede usar sql_variant en CONTAINSTABLE y FREETEXTTABLE.sql_variant cannot be used in CONTAINSTABLE and FREETEXTTABLE.

ODBC no es totalmente compatible con sql_variant.ODBC does not fully support sql_variant. Por tanto, las columnas de consultas de sql_variant se devuelven como datos binarios con el proveedor OLE DB de Microsoft para ODBC (MSDASQL).Therefore, queries of sql_variant columns are returned as binary data when you use Microsoft OLE DB Provider for ODBC (MSDASQL). Por ejemplo, una columna sql_variant que contiene los datos de la cadena de caracteres 'PS2091' se devuelve como 0x505332303931.For example, a sql_variant column that contains the character string data 'PS2091' is returned as 0x505332303931.

Comparar los valores de sql_variantComparing sql_variant Values

El tipo de datos sql_variant pertenece a la parte superior de la lista de jerarquías de tipos de datos para conversión.The sql_variant data type belongs to the top of the data type hierarchy list for conversion. En las comparaciones de sql_variant, el orden de la jerarquía del tipo de datos SQL ServerSQL Server se agrupa en familias de tipos de datos.For sql_variant comparisons, the SQL ServerSQL Server data type hierarchy order is grouped into data type families.

Jerarquía de tipo de datosData type hierarchy Familia de tipo de datosData type family
sql_variantsql_variant sql_variantsql_variant
datetime2datetime2 Fecha y horaDate and time
datetimeoffsetdatetimeoffset Fecha y horaDate and time
datetimedatetime Fecha y horaDate and time
smalldatetimesmalldatetime Fecha y horaDate and time
datedate Fecha y horaDate and time
timetime Fecha y horaDate and time
floatfloat Valor numérico aproximadoApproximate numeric
realreal Valor numérico aproximadoApproximate numeric
decimaldecimal Valor numérico exactoExact numeric
moneymoney Valor numérico exactoExact numeric
smallmoneysmallmoney Valor numérico exactoExact numeric
bigintbigint Valor numérico exactoExact numeric
intint Valor numérico exactoExact numeric
smallintsmallint Valor numérico exactoExact numeric
tinyinttinyint Valor numérico exactoExact numeric
bitbit Valor numérico exactoExact numeric
nvarcharnvarchar UnicodeUnicode
ncharnchar UnicodeUnicode
varcharvarchar UnicodeUnicode
charchar UnicodeUnicode
varbinaryvarbinary BinarioBinary
binariobinary BinarioBinary
uniqueidentifieruniqueidentifier UniqueidentifierUniqueidentifier

Las comparaciones de sql_variant siguen estas reglas:The following rules apply to sql_variant comparisons:

  • Cuando se comparan valores sql_variant de distintos tipos de datos base 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.When sql_variant values of different base data types are compared and the base data types are in different data type families, the value whose data type family is higher in the hierarchy chart is considered the greater of the two values.
  • Cuando se comparan valores sql_variant de distintos tipos de datos base 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, después, se realiza la comparación.When sql_variant values of different base data types are compared and the base data types are in the same data type family, the value whose base data type is lower in the hierarchy chart is implicitly converted to the other data type and the comparison is then made.
  • 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, marcas de comparación e identificador de orden.When sql_variant values of the char, varchar, nchar, or nvarchar data types are compared, their collations are first compared based on the following criteria: LCID, LCID version, comparison flags, and sort ID. Cada uno de estos criterios se compara como valores enteros y en el orden enumerado.Each of these criteria are compared as integer values, and in the order listed. Si todos estos criterios son iguales, se comparan los valores reales de las cadenas según la intercalación.If all of these criteria are equal, then the actual string values are compared according to the collation.

Convertir datos sql_variantConverting sql_variant Data

Cuando se usa el tipo de datos sql_variant, SQL ServerSQL Server admite conversiones implícitas de objetos con otros tipos de datos al tipo sql_variant,When handling the sql_variant data type, SQL ServerSQL Server supports implicit conversions of objects with other data types to the sql_variant type. pero SQL ServerSQL Server no admite conversiones implícitas de datos sql_variant a un objeto con otro tipo de datos.However, SQL ServerSQL Server does not support implicit conversions from sql_variant data to an object with another data type.

RestrictionsRestrictions

En esta tabla se muestran los tipos de valores que no se pueden almacenar mediante sql_variant:The following table lists the types of values that cannot be stored by using sql_variant:

ntextvarchar(max) varbinary(max)varbinary(max)
nvarchar(max)nvarchar(max) xmlxml
textotext ntextntext
imagenimage rowversion (timestamp)rowversion (timestamp)
sql_variantsql_variant geographygeography
hierarchyidhierarchyid geometrygeometry
Tipos definidos por el usuarioUser-defined types datetimeoffsetdatetimeoffset

EjemplosExamples

A.A. Usar un tipo de datos sql_variant en una tablaUsing a sql_variant in a table

En este ejemplo se crea una tabla con varios tipos de datos sql_variant.The following example, creates a table with a sql_variant data type. Luego se recupera la información de SQL_VARIANT_PROPERTY sobre el valor colA de 46279.1, donde colB =1689, teniendo en cuenta que tableA tiene colA que es del tipo sql_variant y colB.Then the example retrieves SQL_VARIANT_PROPERTY information about the colA value 46279.1 where colB =1689, given that tableA has colA that is of type sql_variant and colB.

CREATE   TABLE tableA(colA sql_variant, colB int)  
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)  
SELECT   SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',  
         SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',  
         SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'  
FROM      tableA  
WHERE      colB = 1689  

El conjunto de resultados es el siguiente.Here is the result set. Tenga en cuenta que cada uno de estos tres valores es sql_variant. Note that each of these three values is a *sql_variant*.

Base Type    Precision    Scale  
---------    ---------    -----  
decimal      8           2  

(1 row(s) affected)  

B.B. Usar un tipo de datos sql_variant como una variableUsing a sql_variant as a variable

En este ejemplo se crea una variable mediante el tipo de datos sql_variant y después se recupera información de SQL_VARIANT_PROPERTY sobre una variable denominada @v1.The following example, creates a variable using the sql_variant data type, and then retrieves SQL_VARIANT_PROPERTY information about a variable named @v1.

DECLARE @v1 sql_variant;  
SET @v1 = 'ABC';  
SELECT @v1;  
SELECT SQL_VARIANT_PROPERTY(@v1, 'BaseType');  
SELECT SQL_VARIANT_PROPERTY(@v1, 'MaxLength');  

Vea tambiénSee also

CAST y CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)SQL_VARIANT_PROPERTY (Transact-SQL)