Crear y modificar columnas de identificadores

Puede utilizar una columna de identificadores para crear un número de identificación que se incrementa automáticamente en una tabla. Puede crear una columna de identificadores y una columna GUID en cada tabla.

Propiedad IDENTITY

Puede implementar las columnas de identificadores con la propiedad IDENTITY. De este modo, el programador puede especificar un número de identidad en la primera fila insertada en la tabla (propiedad Inicialización de identidad) y un incremento (propiedad Incremento de identidad) que se agregan a la inicialización para determinar números de identidad consecutivos. Cuando se insertan valores en una tabla con una columna de identificadores, Motor de base de datos genera automáticamente el siguiente valor de identidad agregando el incremento al valor de inicialización. Al agregar columnas de identificadores a tablas existentes, los números de identidad se agregan a las filas existentes de la tabla, con los valores de inicialización e incremento aplicados en el orden en que se insertaron originalmente dichas filas. También se generan números de identidad para todas las filas nuevas que se agregan. No se puede modificar una columna de tabla existente para agregar la propiedad IDENTITY.

Cuando utilice la propiedad IDENTITY para definir una columna de identificadores, tenga en cuenta lo siguiente:

  • Las tablas sólo pueden contener una columna definida con la propiedad IDENTITY y dicha columna debe definirse con un tipo de datos decimal, int, numeric, smallint, bigint o tinyint.

  • Se pueden especificar los valores de inicialización e incremento. El valor predeterminado es 1 para ambos.

  • La columna de identificadores no debe aceptar valores NULL ni contener ninguna definición ni objeto DEFAULT.

  • Es posible hacer referencia a la columna en una lista de selección mediante la palabra clave $IDENTITY después de haber configurado la propiedad IDENTITY. También se puede hacer referencia a la columna por su nombre.

  • Se puede utilizar la función OBJECTPROPERTY para determinar si una tabla cuenta con una columna IDENTITY. La función COLUMNPROPERTY se puede utilizar para determinar el nombre de la columna IDENTITY.

  • Se puede utilizar SET IDENTITY_INSERT para deshabilitar la propiedad IDENTITY de una columna y permitir que se inserten valores de forma explícita.

    Nota

    Si hay una columna de identificadores en una tabla en la que se realizan eliminaciones frecuentemente, pueden quedar espacios entre los valores de identidad. Los valores de identidad eliminados no se vuelven a utilizar. Para evitar esos espacios, no utilice la propiedad IDENTITY. En su lugar, cree un desencadenador que, a medida que se inserten filas, determine un nuevo valor de identificador basado en los valores existentes de la columna de identificadores.

Identificadores únicos globales

Aunque la propiedad IDENTITY automatice la numeración de las filas de una tabla, dos tablas distintas, cada una con sus propias columnas de identificadores, pueden generar los mismos valores. Esto es debido a que se garantiza que la propiedad IDENTITY es única sólo para la tabla en la que se utiliza. Si una aplicación debe generar una columna de identificadores única para toda la base de datos, o para todas las bases de datos de todos los equipos en red del mundo, use el tipo de datos uniqueidentifier y la función NEWID o NEWSEQUENTIALID(). Además, puede aplicar la propiedad ROWGUIDCOL para indicar que la nueva columna es una columna de GUID de filas. A diferencia de las columnas definidas con la propiedad IDENTITY, el Motor de base de datos no genera automáticamente valores para una columna de tipo uniqueidentifier. Para insertar un valor único global, cree una definición DEFAULT en la columna que usa la función NEWID o NEWSEQUENTIALID para generar un valor único global. Para obtener más información, vea Usar datos uniqueidentifier.

Se puede hacer referencia a una columna con la propiedad ROWGUIDCOL en una lista de selección mediante la palabra clave $ROWGUID. Este método es similar al que permite hacer referencia a una columna IDENTITY mediante la palabra clave $IDENTITY. Una tabla sólo podrá tener una columna ROWGUIDCOL, que debe definirse mediante el tipo de datos uniqueidentifier. Se puede usar la función OBJECTPROPERTY (Transact-SQL) para determinar si una tabla cuenta con una columna ROWGUIDCOL, y la función COLUMNPROPERTY (Transact-SQL) para determinar el nombre de la columna ROWGUIDCOL.

En el siguiente ejemplo se crea una tabla con una columna uniqueidentifier como clave principal. En el ejemplo se usa la función NEWSEQUENTIALID() en la restricción DEFAULT para proporcionar valores para nuevas filas. Se aplica la propiedad ROWGUIDCOL a la columna uniqueidentifier de modo que se pueda hacer referencia a la misma mediante la palabra clave $ROWGUID.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

Para crear una nueva columna de identificadores durante la creación de una tabla

CREATE TABLE (Transact-SQL)

Para crear una nueva columna de identificadores en una tabla existente

ALTER TABLE (Transact-SQL)

Para eliminar una columna de identificadores

ALTER TABLE (Transact-SQL)

Cómo eliminar columnas de una tabla (Visual Database Tools)

Para obtener información sobre las columnas de identidad

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

Para comprobar y corregir el valor de identidad actual para una tabla especificada

DBCC CHECKIDENT (Transact-SQL)

Para establecer un nuevo valor de inicialización

DBCC CHECKIDENT (Transact-SQL)