Usar datos especiales

Los tipos de datos especiales son los que no se incluyen en ninguna de las categorías de tipos de datos restantes. Por ejemplo, para almacenar datos como 1 o 0 correspondientes a los valores sí o no en una encuesta de un cliente, use el tipo de datos bit. Microsoft SQL Server 2005 tiene varios tipos de datos que encajan en esta categoría.

  • bit
    No es necesario incluir los datos bit entre comillas simples. Son datos numéricos similares a los datos enteros y numéricos de SQL Server, con la excepción de que en las columnas bit sólo se pueden almacenar valores 0 y 1.

    Los valores de cadena true y false se pueden convertir en valores bit, como se muestra a continuación.

    SELECT CONVERT (bit, 'true'), CONVERT(bit, 'false')
    

    El valor True se convierte en 1 y el valor False, en 0.

  • sql_variant
    El tipo de datos sql_variant en SQL Server permite que una columna, una parámetro o una variable almacenen valores de datos de distintos tipos. Cada instancia de una columna sql_variant registra el valor de los datos y los metadatos que describen el valor (tipo de datos base, tamaño máximo, escala, precisión e intercalación).

    La segunda tabla en el ejemplo siguiente contiene una columna sql_variant:

    CREATE TABLE ObjectTable (ObjectID int CONSTRAINT PKObjectTable PRIMARY KEY, ObjectName nvarchar(80), ObjectWeight decimal(10,3), ObjectColor nvarchar(20))
    CREATE TABLE VariablePropertyTable (ObjectID int REFERENCES ObjectTable(ObjectID), PropertyName      nvarchar(100), PropertyValue sql_variant, CONSTRAINT PKVariablePropertyTable PRIMARY KEY(ObjectID, PropertyName))
    

    Para obtener la información de los metadatos para una instancia sql_variant específica, use la función SQL_VARIANT_PROPERTY.

  • sysname
    Las instancias de SQL Server incluyen un tipo de datos definido por el usuario llamado sysname. El tipo de datos sysname se utiliza para las columnas de tablas, variables y parámetros de procedimientos almacenados que almacenan nombres de objeto. La definición exacta de sysname se relaciona con las reglas para los identificadores; por lo tanto, puede variar entre instancias de SQL Server. sysname es funcionalmente equivalente a nvarchar(128). SQL Server versión 6.5 o anteriores sólo admite identificadores más pequeños, pero en las versiones anteriores sysname se define como varchar(30).

    ms191240.note(es-es,SQL.90).gifImportante:
    En bases de datos que distinguen entre mayúsculas y minúsculas o que incluyen una intercalación binaria, sysname se reconoce como un tipo de datos del sistema de SQL Server sólo si aparece en minúsculas.
  • table
    El tipo de datos table es como las tablas temporales y se puede utilizar para almacenar un conjunto de resultados para un procesamiento posterior. Este tipo de datos sólo se puede utilizar para definir variables locales de tipo table y el valor devuelto de una función definida por el usuario.

    La definición de una variable de tabla o un valor devuelto incluye las definiciones de las columnas, el tipo de datos, la precisión y la escala de cada columna, y las restricciones opcionales PRIMARY KEY, UNIQUE, NULL y CHECK. Un tipo de datos definido por el usuario no se puede usar como tipo de datos.

    El formato de las filas almacenadas en una variable table o devueltas por una función definida por el usuario se deben definir cuando se declara la variable o se crea la función. La sintaxis se basa en la de CREATE TABLE. Por ejemplo:

    DECLARE @TableVar TABLE (Cola int PRIMARY KEY, Colb char(3))
    
    INSERT INTO @TableVar VALUES (1, 'abc')
    INSERT INTO @TableVar VALUES (2, 'def')
    
    SELECT * FROM @TableVar
    GO
    

    Las variables de table y las funciones definidas por el usuario que devuelven una table se pueden usar únicamente en ciertas instrucciones SELECT e INSERT, y donde se admiten tablas en las instrucciones UPDATE, DELETE y DECLARE CURSOR. Las variables table y las funciones definidas por el usuario que devuelven una table no se pueden usar en ninguna otra instrucción Transact-SQL.

    Los índices u otras restricciones aplicadas a la tabla se deben definir como parte de la variable DECLARE o de la instrucción CREATE FUNCTION. No se pueden aplicar posteriormente porque las instrucciones CREATE INDEX o ALTER TABLE no pueden hacer referencia a las variables de tabla y a las funciones definidas por el usuario.

    Para obtener más información acerca de la sintaxis que se utiliza para definir las variables y funciones definidas por el usuario table, vea DECLARE @local\_variable (Transact-SQL) y CREATE FUNCTION (Transact-SQL).

  • timestamp
    El tipo de datos timestamp de SQL Server no tiene nada que ver con la hora o la fecha. Los valores timestamp de SQL Server son números binarios que indican la secuencia relativa en la que las modificaciones de datos tienen lugar en una base de datos. El tipo de datos timestamp se desarrolló originalmente para admitir los algoritmos de recuperación de SQL Server. Cada vez que se modificaba una página, se marcaba con el valor actual de @@DBTS, y @@DBTS se incrementaba en uno. Esto era suficiente para que la recuperación determinara la secuencia relativa en la que se habían modificado las páginas, pero los valores timestamp no tenían relación alguna con el tiempo.

    En SQL Server versión 7.0 y SQL Server 2000, @@DBTS sólo se incrementa para usarse en las columnas timestamp. Si una tabla contiene una columna timestamp, cada vez que una instrucción INSERT, UPDATE o DELETE modifica una fila, el valor de timestamp de la fila se establece en el valor @@DBTS actual y, después, @@DBTS se incrementa en uno.

    No use nunca columnas timestamp en claves, especialmente en claves principales, porque el valor timestamp cambia siempre que se modifica la fila.

    Para registrar las veces que se producen modificaciones de datos en una tabla, use un tipo de datos datetime o smalldatetime para registrar los eventos y desencadenadores y actualizar automáticamente los valores cuando alguna modificación tenga lugar.

  • Tipos de datos de alias
    Los tipos de datos de alias permiten ampliar un tipo de datos base de SQL Server (como varchar, por ejemplo) con un nombre descriptivo y un formato adaptado a un uso específico. Por ejemplo, esta instrucción implementa un tipo de datos birthday definido por el usuario que permite usar valores NULL con el tipo de datos base datetime:

    EXEC sp_addtype birthday, datetime, 'NULL'
    

    Tenga cuidado al elegir los tipos base para implementar tipos de datos definidos por el usuario. Por ejemplo, en Estados Unidos, los números de la seguridad social tienen el formato nnn-nn-nnnn. Aunque estos números contienen también números, forman un identificador y no están sujetos a operaciones matemáticas. Por lo tanto, es una práctica común crear un tipo de datos para el número de la seguridad social como varchar y crear una restricción CHECK para exigir el formato de los números de la seguridad social almacenados en la tabla:

    EXEC sp_addtype SSN, 'VARCHAR(11)', 'NOT NULL'
    GO
    CREATE TABLE ShowSSNUsage (EmployeeID int PRIMARY KEY, EmployeeSSN SSN, CONSTRAINT CheckSSN CHECK ( EmployeeSSN LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' )
    )
    GO
    

    Si las columnas SSN se suelen usar como columnas de claves en los índices, especialmente en los índices agrupados, el tamaño de las claves puede reducirse de 11 bytes a 4 si el tipo de datos definido por el usuario SSN se implementa en cambio con el tipo de datos base int. Esta reducción en el tamaño de la clave mejora la recuperación de los datos. La mejor eficacia de la recuperación de datos y la eliminación de la necesidad de la restricción CHECK normalmente compensarán el proceso de conversión adicional de int a un formato de carácter cuando se muestran o modifican valores SSN.

Vea también

Otros recursos

CREATE FUNCTION (Transact-SQL)
Tipos de datos (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)
table (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005