IF NOTEXISTS( SELECT TOP 11 FROM INFORMATION_SCHEMA.COLUMNS WHERE [TABLE_NAME] ='Employees' AND [COLUMN_NAME] ='EmployeeID') BEGIN ALTER TABLE [Employees] ADD [EmployeeID] INTNULL END
方法四:使用 OBJECT_ID 和 COLUMNPROPERTY 函数(适用于 SQL Server 2005 及以后版本)
1 2 3 4 5
IF (OBJECT_ID(N'[dbo].[myTable]') ISNOT NULLAND COLUMNPROPERTY( OBJECT_ID(N'[dbo].[myTable]'), 'ThisColumnDoesNotExist', 'ColumnId') ISNULL) BEGIN SELECT'Column does not exist -- You can add TSQL to add the column here' END
CREATEFUNCTION ColumnExists(@TableNamevarchar(100), @ColumnNamevarchar(100)) RETURNSvarchar(1) AS BEGIN DECLARE@Resultvarchar(1); IF EXISTS (SELECT*FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME =@TableNameAND COLUMN_NAME =@ColumnName) BEGIN SET@Result='T' END ELSE BEGIN SET@Result='F' END RETURN@Result; END GO
GRANTEXECUTEON [ColumnExists] TO [whoever] GO
IF ColumnExists('xxx', 'yyyy') ='F' BEGIN ALTER TABLE xxx ADD yyyyy varChar(10) NOT NULL END GO
核心代码
以下是一个使用 COL_LENGTH 函数的示例代码,用于检查列是否存在并执行相应操作:
1 2 3 4 5 6 7 8 9 10
IF COL_LENGTH('Table_Name', 'Column_Name') ISNULL BEGIN -- Column Not Exists, implement your logic ALTER TABLE Table_Name ADD Column_Name INT; END ELSE BEGIN -- Column Exists, implement your logic UPDATE Table_Name SET Column_Name =0WHERE1=1; END
最佳实践
优先使用 INFORMATION_SCHEMA.COLUMNS 视图:因为 Microsoft 不保证系统表在不同版本之间的兼容性,例如 dbo.syscolumns 已被弃用。