向表中添加列(如果该表不存在)

我想为MS SQL Server编写一个查询,将列添加到表中。但我不希望在运行/执行以下查询时显示任何错误。

我使用这种类型的查询添加一个表…

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

但我不知道如何为列编写这个查询。

343667 次浏览

可以通过使用sys.columns表io sys.objects来使用类似的构造。

IF NOT EXISTS (
SELECT *
FROM   sys.columns
WHERE  object_id = OBJECT_ID(N'[dbo].[Person]')
AND name = 'ColumnName'
)

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

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 table_name
ADD [column_name] INT
END
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

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

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
< p >编辑: 注意,INFORMATION_SCHEMA视图可能并不总是更新,请使用SYS.COLUMNS代替:

IF NOT EXISTS (SELECT 1 . 代码从SYS.COLUMNS…< / > < / p >

IF NOT EXISTS (SELECT * FROM syscolumns
WHERE ID=OBJECT_ID('[db].[Employee]') AND NAME='EmpName')
ALTER TABLE [db].[Employee]
ADD [EmpName] VARCHAR(10)
GO

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

当在另一个数据库中检查一个列时,你可以简单地包含数据库名称:

IF NOT EXISTS (
SELECT *
FROM   DatabaseName.sys.columns
WHERE  object_id = OBJECT_ID(N'[DatabaseName].[dbo].[TableName]')
AND name = 'ColumnName'
)