martes, 20 de noviembre de 2012

SQL Server: Cómo saber si hay columnas Identity en una base de datos

Si estáis haciendo algún tipo de importación sobre una base de datos os puede resultar necesario saber si sobre alguna de las tablas en las que se van a insertar datos existen columnas Identity ya que se debe tener especial cuidado con la inserción de valores en este tipo de columnas. La siguiente consulta os servirá para saber esquema y tabla de las columnas Identity que existan en una base de datos:

-- Buscar columnas identity en base de datos
SELECT SCHEMA_NAME(OBJECTPROPERTY(OBJECT_ID,'SchemaId')) AS SchemaName,
       OBJECT_NAME(OBJECT_ID) AS TableName,
       name AS ColumnName
FROM  SYS.COLUMNS
WHERE is_identity = 1
ORDER BY SchemaName, TableName, ColumnName

A continuación os detallo cómo se ha construido la consulta anterior:
  • La instrucción SCHEMA_NAME de Transact SQL devuelve el nombre de esquema asociado a un identificador de esquema. Podéis encontrar más información sobre esta instrucción en el siguiente enlace del MSDN (SCHEMA_NAME).

  • La instrucción OBJECTPROPERTY de Transact SQL devuelve información acerca de los objetos de ámbito de esquema. Para obtener el nombre del esquema en la consulta anterior necesitaremos utilizar la propiedad "SchemaId". Podéis encontrar más información sobre esta instrucción en el siguiente enlace del MSDN (OBJECTPROPERTY).

  • La instrucción OBJECT_ID de Transact SQL devuelve el número de identificador de un objeto de ámbito de esquema.Podéis encontrar más información sobre esta instrucción en el siguiente enlace del MSDN (OBJECT_ID).

  • La instrucción OBJECT_NAME de Transact SQL devuelve el nombre del objeto para los objetos de ámbito de esquema a partir de un identificador proporcionado. Podéis encontrar más información sobre esta instrucción en el siguiente enlace del MSDN (OBJECT_NAME).

  • La vista SYS.COLUMNS devuelve una fila por cada columna de cada tabla y vista, y una fila por cada parámetro de un procedimiento almacenado. Es recomendable utilizar esta vista en lugar de la tabla SYS.SYSCOLUMNS que se mantiene por compatibilidad con SQL Server 2000 pero que desaparecerá en futuras versiones de SQL Server. Podéis encontrar más información sobre este tema en el siguiente enlace del MSDN (SYS.COLUMNS).

  • La columna "name" de la vista SYS.COLUMNS contiene el nombre de la columna de tabla, vista o parámetro de procedimiento.

  • La columna "is_identity" de la vista SYS.COLUMNS contiene los valores 0 (no es columna Identity) o 1 (es columna Identity).

Espero que el artículo os haya sido interesante, dentro de areaTIC puedes encontrar otros artículos, no dudes en consultar nuestro archivo; también puedes seguirnos por RSS o las principales redes sociales (twitter, facebook, linkedin...)


LECTURAS RELACIONADAS RECOMENDADAS POR AREATIC.NET

3 comentarios:

Guillem Ganduxé dijo...

Buen artículo, muy útil!

David Berdié Escolano dijo...

Encantado de haberte ayudado!

makuki dijo...

other way:
select columnproperty ( object_id ( 'dbo.TABLE' ), 'FIELD', 'IsIdentity')

Publicar un comentario