Hvordan kontrolleres det, om en kolonne findes i en SQL Server-tabelle?

Jeg skal tilføje en bestemt kolonne, hvis den ikke findes. Jeg har noget som det følgende, men det returnerer altid false:

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

Hvordan kan jeg kontrollere, om en kolonne findes i en tabel i SQL Server-databasen?

Tilpas nedenstående til dine specifikke behov:

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

Rediger for at håndtere redigering til spørgsmål: Det burde virke - tag et grundigt kig på din kode for dumme fejl; forespørger du INFORMATION_SCHEMA på den samme database som din indsættelse anvendes på for eksempel? Har du en slåfejl i dit tabel/spalte navn i en af de to statements?

Kommentarer (3)

Prøv dette...

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
Kommentarer (4)

Tjek først, om kombinationen table/column(id/name) findes i dbo.syscolumns (en intern SQL Server-tabelle, der indeholder feltdefinitioner), og hvis ikke, skal du sende den relevante forespørgsel ALTER TABLE for at tilføje den. For eksempel:

IF NOT EXISTS ( SELECT  *
            FROM    syscolumns
            WHERE   id = OBJECT_ID('Client')
                    AND name = 'Name' ) 
ALTER TABLE Client
ADD Name VARCHAR(64) NULL
Kommentarer (0)