1792 votos

Cómo comprobar si la columna existe en la tabla de SQL Server

Necesito agregar una columna específica, si no existe. Tengo algo como esto, pero siempre devuelve false.:

IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_NAME = 'myTableName' 
           AND  COLUMN_NAME = 'myColumnName')

¿Cómo puedo comprobar si una columna en una tabla en SQL Server?

1976voto

Mitch Wheat Puntos 169614

SQL Server 2005 en adelante:

if exists(select * from sys.columns 
            where Name = N'columnName' and Object_ID = Object_ID(N'tableName'))
begin
    -- Column Exists
end

Y una parte SUPERIOR de la caja de la versión:

IF EXISTS(SELECT * FROM sys.columns 
        WHERE [name] = N'columnName' AND [object_id] = OBJECT_ID(N'tableName'))
BEGIN
    -- Column Exists
END

964voto

Martin Smith Puntos 174101

Una versión concisa

 IF COL_LENGTH('table_name','column_name') IS NULL
 BEGIN
 /*Column does not exist or caller does not have permission to view the object*/
 END

El punto acerca de los permisos de visualización de metadatos se aplica a todas las respuestas, no sólo éste.

142voto

Luke Bennett Puntos 16100

Modificar la de abajo para adaptarse a sus requisitos específicos:

if not exists (select
                     column_name
               from
                     INFORMATION_SCHEMA.columns
               where
                     table_name = 'MyTable'
                     and column_name = 'MyColumn')
    alter table MyTable add MyColumn int

Editar para lidiar con la edición a la pregunta: de Que deben trabajar - tener una mirada cuidadosa sobre tu código de errores estúpidos; está usted consultando INFORMATION_SCHEMA en la misma base de datos como de su inserción se aplica a, por ejemplo? ¿Tienes una errata en la tabla/nombre de la columna en cualquiera de las declaraciones?

73voto

Leon Tayson Puntos 1837

Intenta esto...

IF NOT EXISTS(
  SELECT TOP 1 1
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE 
    [TABLE_NAME] = 'Employees'
    AND [COLUMN_NAME] = 'EmployeeID')
BEGIN
  ALTER TABLE [Employees]
    ADD [EmployeeID] INT NULL
END

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X