【问题标题】:Drop column if exists in SQL Server 2008 r2如果 SQL Server 2008 r2 中存在,则删除列
【发布时间】:2018-07-24 06:42:10
【问题描述】:

我使用的是 SQL Server 2008 R2。

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

试过了:

ALTER TABLE Emp 
DROP COLUMN IF EXISTS Lname;

错误:

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

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

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

【问题讨论】:

  • 'DROP COLUMN IF EXISTS' 如果我没记错的话,它是 mysql
  • @StanislavKundii SQL Server 2016+ 也支持该语法。

标签: sql-server sql-server-2008-r2


【解决方案1】:
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

【讨论】:

  • 如果必须删除多列,我们将如何调整上述语句?请建议
  • @vikrant rana 您必须将需要放入单独 if 语句的每一列包装起来
  • @Paul O... 谢谢。我很快就会试一试。
【解决方案2】:

来自MSDN社交documentation,我们可以试试:

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;

【讨论】:

  • 哦... 为什么要加入? 'c.object_id = OBJECT_ID('dbo.Emp')' 和 Top?
【解决方案3】:

我是这样走的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多