Add a column to a table, if it does not already exist
我想为MS SQL Server编写一个查询,将列添加到表中。但我不希望在运行/执行以下查询时显示任何错误。
我正在使用这种查询添加表…
1 2 3 4 5 6 | IF EXISTS ( SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]') AND TYPE IN (N'U') ) |
但是我不知道如何为列编写这个查询。
通过使用
1 2 3 4 5 6 | IF NOT EXISTS ( SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'[dbo].[Person]') AND name = 'ColumnName' ) |
1 2 3 4 5 | IF COL_LENGTH('table_name', 'column_name') IS NULL BEGIN ALTER TABLE table_name ADD [column_name] INT END |
。
另一种选择。我更喜欢这种方法,因为它写得更少,但两种方法完成了相同的事情。
1 2 3 4 5 | IF COLUMNPROPERTY(OBJECT_ID('dbo.Person'), 'ColumnName', 'ColumnId') IS NULL BEGIN ALTER TABLE Person ADD ColumnName VARCHAR(MAX) NOT NULL END |
号
我还注意到你的表在寻找表的位置,显然就是这个
1 | if COLUMNPROPERTY( OBJECT_ID('dbo.Person'),'ColumnName','ColumnId') is not null |
这是另一个对我有用的变体。
1 2 3 4 5 6 7 8 | 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 |
。
EDIT:
Note thatINFORMATION_SCHEMA views may not always be updated, useSYS.COLUMNS instead:
号
埃多克斯1〔2〕
1 2 3 4 5 | IF NOT EXISTS (SELECT * FROM syscolumns WHERE ID=OBJECT_ID('[db].[Employee]') AND NAME='EmpName') ALTER TABLE [db].[Employee] ADD [EmpName] VARCHAR(10) GO |
。
我希望这会有所帮助。更多信息
1 2 3 4 5 | 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 |