私はテーブルに列を追加するMS SQL Serverのためのクエリを書きたいです。ただし、次のクエリを実行したときにエラーが表示されることはありません。
私はテーブルを追加するためにこの種のクエリを使用しています...
IF EXISTS (
SELECT *
FROM sys.objects
WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]')
AND TYPE IN (N'U')
)
しかし、私はこのクエリをどのように書くのかわかりません。
sys.columns
テーブルio sys.objects
を使用して、同様の構成を使用できます。
IF NOT EXISTS (
SELECT *
FROM sys.columns
WHERE object_id = OBJECT_ID(N'[dbo].[Person]')
AND name = 'ColumnName'
)
IF COL_LENGTH('table_name', 'column_name') IS NULL
BEGIN
ALTER TABLE table_name
ADD [column_name] INT
END
もう一つの選択肢。私はこのアプローチを好んでいます。というのも、それは文章が少ないからですが、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
/ *表内の列の存在を確認する* /
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
これは私のために働いたもう一つのバリエーションです。
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....
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