web-dev-qa-db-ja.com

テーブルに列が存在しない場合は追加します。

私はテーブルに列を追加するMS SQL Serverのためのクエリを書きたいです。ただし、次のクエリを実行したときにエラーが表示されることはありません。

私はテーブルを追加するためにこの種のクエリを使用しています...

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

しかし、私はこのクエリをどのように書くのかわかりません。

150
Tavousi

sys.columnsテーブルio sys.objectsを使用して、同様の構成を使用できます。

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

もう一つの選択肢。私はこのアプローチを好んでいます。というのも、それは文章が少ないからですが、2つは同じことを達成します。

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

私はまたあなたのテーブルが存在する場所を探していることに気づきました。

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

/ *表内の列の存在を確認する* /

 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

これは私のために働いたもう一つのバリエーションです。

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

編集:INFORMATION_SCHEMAビューは必ずしも更新されないかもしれないことに注意してください、代わりに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