Crear y modificar columnas de identificadores

Actualizado: 14 de abril de 2006

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, SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) genera automáticamente el siguiente valor de identidad agregando el incremento al valor de inicialización. Cuando se agregan columnas de identificadores a tablas existentes, los números de identidad se agregan a las filas existentes en la tabla, con los valores de inicialización y de incremento aplicados comenzando por el orden en el que dichas filas se agregaron originalmente. 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 bien para todas las bases de datos de todos los equipos conectados en red del mundo, use el tipo de datos uniqueidentifier y la función NEWID (Transact-SQL) o NEWSEQUENTIALID(). Database Engine (Motor de base de datos) no genera valores para la columna de forma automática. 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.

Después de establecer la propiedad ROWGUIDCOL, se puede hacer referencia a la columna 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)

Vea también

Conceptos

Columnas de numeración automática y de identificadores
Usar datos uniqueidentifier

Otros recursos

COLUMNPROPERTY (Transact-SQL)
NEWID (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
uniqueidentifier (Transact-SQL)
Replicar columnas de identidad

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido modificado:
  • Se quitó contenido acerca del uso de restricciones UNIQUE con columnas ROWGUID.
  • Se aclaró la finalidad del uso de la propiedad ROWGUIDCOL.
Contenido nuevo:
  • Se agregaron referencias al uso de NEWSEQUENTIALID además de NEWID al crear una columna GUID.
  • Se agregó un ejemplo de creación de una tabla con una columna GUID.

5 de diciembre de 2005

Contenido nuevo:
  • Se agregó información sobre cómo agregar columnas de identificadores a tablas existentes y se aclaró que la propiedad IDENTITY no se puede agregar a una columna existente.