wake-up-neo.com

Fügen Sie einer Tabelle eine Spalte hinzu, falls diese noch nicht vorhanden ist

Ich möchte eine Abfrage für MS SQL Server schreiben, die einer Tabelle eine Spalte hinzufügt. Ich möchte jedoch keine Fehleranzeige, wenn ich die folgende Abfrage ausführen/ausführen möchte.

Ich verwende diese Art von Abfrage, um eine Tabelle hinzuzufügen ...

IF EXISTS (
       SELECT *
       FROM   sys.objects
       WHERE  OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
              AND TYPE IN (N'U')
   )

Aber ich weiß nicht, wie ich diese Abfrage für eine Spalte schreiben soll.

142
Tavousi

Sie können ein ähnliches Konstrukt verwenden, indem Sie die sys.columns-Tabelle io sys.objects verwenden.

IF NOT EXISTS (
  SELECT * 
  FROM   sys.columns 
  WHERE  object_id = OBJECT_ID(N'[dbo].[Person]') 
         AND name = 'ColumnName'
)
171
IF COL_LENGTH('table_name', 'column_name') IS NULL
BEGIN
    ALTER TABLE table_name
    ADD [column_name] INT
END
60
SPL

Eine andere Alternative. Ich bevorzuge diesen Ansatz, weil er weniger schreibt, aber die beiden erreichen dasselbe.

IF COLUMNPROPERTY(OBJECT_ID('dbo.Person'), 'ColumnName', 'ColumnId') IS NULL
BEGIN
    ALTER TABLE Person 
    ADD ColumnName VARCHAR(MAX) NOT NULL
END

Ich habe auch bemerkt, dass Sie suchen, wo es einen Tisch gibt, der offensichtlich genau das ist 

 if COLUMNPROPERTY( OBJECT_ID('dbo.Person'),'ColumnName','ColumnId') is not null
29
JStead

/ * ÜBERPRÜFUNG DER SPALTE IN DER TABELLE * /

 IF COL_LENGTH('TABLE_NAME','COLUMN_NAME') IS NULL
 BEGIN
 ALTER TABLE .... /*COLUMN DOES NOT EXIST OR CALLER DOES NOT HAVE PERMISSION TO VIEW THE OBJECT*/
 END
5
SSJGSS

Hier ist eine weitere Variante, die für mich funktioniert hat.

IF NOT EXISTS (SELECT 1
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE upper(TABLE_NAME) = 'TABLENAME'
        AND upper(COLUMN_NAME) = 'COLUMNNAME')
BEGIN
    ALTER TABLE [dbo].[Person] ADD Column
END
GO

BEARBEITEN: Beachten Sie, dass INFORMATION_SCHEMA-Ansichten möglicherweise nicht immer aktualisiert werden. Verwenden Sie stattdessen SYS.COLUMNS:

IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS....

1
Adil H. Raza
IF NOT EXISTS (SELECT 1  FROM SYS.COLUMNS WHERE  
OBJECT_ID = OBJECT_ID(N'[dbo].[Person]') AND name = 'DateOfBirth')
BEGIN
ALTER TABLE [dbo].[Person] ADD DateOfBirth DATETIME
END
0
Code First