删除 SQL Server 2008 r2 中存在的列

问题描述 投票:0回答:3

我使用的是 SQL Server 2008 R2。

如果该列已存在于表中,我想删除该列,否则不会抛出任何错误。

尝试过:

ALTER TABLE Emp 
DROP COLUMN IF EXISTS Lname;

错误:

关键字“IF”附近的语法不正确。

通过搜索我得知,这个选项从2016年开始可用。

SQL Server 2008 R2 中的替代方案是什么?

sql-server sql-server-2008-r2
3个回答
49
投票
IF EXISTS (SELECT 1
               FROM   INFORMATION_SCHEMA.COLUMNS
               WHERE  TABLE_NAME = 'Emp'
                      AND COLUMN_NAME = 'Lname'
                      AND TABLE_SCHEMA='DBO')
  BEGIN
      ALTER TABLE Emp
        DROP COLUMN Lname
  END
GO

4
投票

我就是这样走的。

IF COL_LENGTH (N'{Your_TableName}', N'{Your_ColumnName}') IS NOT NULL
BEGIN
    ALTER TABLE {Your_TableName}
    DROP COLUMN {Your_ColumnName};`
END 
GO

4
投票

使用

IF
子句检查系统表中是否存在该列:

IF EXISTS (SELECT 1 FROM sys.objects o
          INNER JOIN sys.columns c ON o.object_id = c.object_id
          WHERE o.name = 'Emp' AND c.name = 'Lname')
ALTER TABLE dbo.Emp DROP COLUMN Lname;
© www.soinside.com 2019 - 2024. All rights reserved.