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

另一种选择。我更喜欢这种方法,因为它的写作较少,但两者完成了同样的事情。

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 回答
6

这是另一个对我有用的变体。

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....

于 2018-10-03T12:49:00.107 回答
3
IF NOT EXISTS (SELECT * FROM syscolumns
  WHERE ID=OBJECT_ID('[db].[Employee]') AND NAME='EmpName')
  ALTER TABLE [db].[Employee]
  ADD [EmpName] VARCHAR(10)
GO

我希望这会有所帮助。更多信息

于 2019-05-02T07:14:54.643 回答
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 回答