首页 > 解决方案 > 从多个表中删除列

问题描述

我有 4 列在数据库中的所有表中重复,我必须删除它们

在此处输入图像描述

如何在不必逐表输入的情况下进行此删除?

标签: sqlsql-servertsql

解决方案


此代码将输出必要的 SQL 以进行更改。

STRING_AGG用于对列和表进行分组。QUOTENAME用于在名称周围正确放置方括号。

SELECT STRING_AGG(
N'ALTER TABLE ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + N'.' + QUOTENAME(t.object_id) + N'
    ' + c.ColumnSql, N'
')
FROM sys.tables t
CROSS APPLY (
    SELECT ColumnSql = STRING_AGG(CAST(N'DROP COLUMN ' + QUOTENAME(c.name) AS nvarchar(max), N'
    ')
    FROM sys.columns c
    WHERE c.object_id = t.object_id
      AND c.name IN (
        'ID_Integracion_CodBodega',
        'ID_Integracion_FechaUltRep',
        'ID_Integracion_ControlTrigger',
        'ID_Integracion_CodBodega_Origen'
    )
) c

您可以使用

DECLARE @sql nvarchar(max) = (
    SELECT STRING_AGG.....
);

EXEC(@sql);

我警告您不要使用INFORMATION_SCHEMA,因为它只是为了兼容性。


推荐阅读