【发布时间】:2015-12-08 07:07:53
【问题描述】:
我需要从表中删除除少数列之外的所有列,而我事先不知道这些列的编号和名称。我想从 sys.columns 获取列名,然后删除除少数之外的所有列。我需要这样的东西:
alter table Table
drop column (
select a.name as ColumnName
from sys.all_columns a
INNER JOIN sys.tables b
on a.object_id = b.object_id
where b.name = 'Table'
where a.name NOT IN (
RowID,
RemoteUserId,
Email,
FirstName,
)
)
【问题讨论】:
-
我认为不动态创建 alter table ddl 语句是不可能的。
-
一次只能删除一列。如果有很多列,不想单独编写语句,可以使用动态 SQL 来构建它们。
-
您可以创建一个临时表,将所有数据泵入其中,删除该表并重命名临时表以匹配删除的表。或者您可以只进行查询以创建许多删除列语句
-
您确定您的操作方式正确吗?也许只是运行 select 'alter table xxx drop column ' + name from sys.columns ... 然后手动运行语句就足够了
标签: sql-server tsql subquery alter-table