如何从SQL Server中的所有表中删除列

Imr*_*han 1 sql-server

我想ABCDEF从我的数据库的所有表中删除该列.我正在尝试这段代码:

declare @SQL nvarchar(max)  

SELECT 
    @SQL = STUFF((SELECT ' DROP column ' + quotename(TABLE_SCHEMA) + '.' + quotename(table_NAME ) +'.ABCDEF;'
FROM
    information_schema.columns 
FOR XML PATH('')),1,2,'')

PRINT @SQL

EXECUTE (@SQL)
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

列附近的语法不正确

这该怎么做?

Pரத*_*ீப் 5

这不是从表中删除列的正确方法。它应该是

ALTER TABLE table_name DROP COLUMN column_name
Run Code Online (Sandbox Code Playgroud)

dynamic query像这样构建你的东西:

DECLARE @sql NVARCHAR(max)=''

SELECT @SQL += 'Alter table ' + Quotename(table_catalog)
               + '.' + Quotename(table_schema) + '.'
               + Quotename(TABLE_NAME) + '  DROP column '
               + Quotename(column_name) + ';'
FROM   information_schema.columns where COLUMN_NAME = 'abcd' -- Here alone mention 
                                                             --the Column to be removed

EXEC Sp_executesql @sql 
Run Code Online (Sandbox Code Playgroud)


Sou*_*avA 5

您可以使用SQL Server的未记录功能sys.sp_msforeachtable.下面的脚本将基本上迭代数据库中的所有表,alter如果需要,它们.

select '[dbo].['+tab.name+']' name into #table from 
sys.tables tab join sys.columns col on tab.object_id = col.object_id and col.name = 'ABCDEF'

exec sys.sp_msforeachtable 'if exists (select 1 from #table where name = ''?'') 
alter table ?  drop column [ABCDEF]'
Run Code Online (Sandbox Code Playgroud)