227

テーブルに列を追加する MS SQL Server のクエリを作成したいと考えています。しかし、次のクエリを実行/実行するときに、エラーを表示したくありません。

この種のクエリを使用してテーブルを追加しています...

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

しかし、列に対してこのクエリを作成する方法がわかりません。

4

7 に答える 7

261

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

IF NOT EXISTS (
  SELECT * 
  FROM   sys.columns 
  WHERE  object_id = OBJECT_ID(N'[dbo].[Person]') 
         AND name = 'ColumnName'
)
于 2012-01-15T15:24:38.220 に答える
116
IF COL_LENGTH('table_name', 'column_name') IS NULL
BEGIN
    ALTER TABLE table_name
    ADD [column_name] INT
END
于 2013-06-21T12:04:20.373 に答える
38

別の選択肢。私はこのアプローチを好みます。なぜなら、書くことは少なくなりますが、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
于 2012-01-15T15:40:08.740 に答える
0
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
于 2016-12-01T16:29:41.113 に答える
0

別のデータベースの列をチェックするときは、単純にデータベース名を含めることができます:

IF NOT EXISTS (
  SELECT * 
  FROM   DatabaseName.sys.columns 
  WHERE  object_id = OBJECT_ID(N'[DatabaseName].[dbo].[TableName]') 
         AND name = 'ColumnName'
)
于 2020-02-11T10:50:59.230 に答える