【问题标题】:Drop column from multiple tables in particular schema in SQL Server从 SQL Server 中特定架构中的多个表中删除列
【发布时间】:2014-06-19 17:09:04
【问题描述】:

我在 dbo、stg、tmp 等不同架构中有许多包含列为“RowId”的表,但我想删除仅包含 stg 架构表的列。

请给出一个脚本来满足上述条件。

提前感谢

【问题讨论】:

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


    【解决方案1】:

    先备份

    DECLARE @SqlStatement VARCHAR(MAX)
    SELECT @SqlStatement = 
        COALESCE(@SqlStatement, '') + 'ALTER TABLE [stg].' 
        + QUOTENAME(TABLE_NAME) + ' DROP COLUMN [RowId];' + CHAR(13)
    FROM INFORMATION_SCHEMA.TABLES t 
      INNER JOIN sys.objects o ON o.name=t.TABLE_NAME
        INNER JOIN sys.columns c ON  o.object_id= c.object_id
    WHERE TABLE_SCHEMA = 'stg' and  c.name='RowId'
    
    PRINT @SqlStatement
    

    确定后,执行 dinamyc SQL 语句

    exec sp_executesql @SqlStatement
    

    【讨论】:

    • 对于大型表,这可能会非常缓慢。创建一个新表(旧表的副本但有更改)并插入数据通常会快得多。删除旧表,然后重命名新表
    • 感谢您的帮助,它按我的意愿正常工作。
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多