问题

如何删除以给定字符串开头的所有表?

我认为这可以用一些动态SQL和INFORMATION_SCHEMA表来完成.

  最佳答案

如果数据库中有一个以上,您可能需要修改查询以包含所有者。

 DECLARE @cmd varchar(4000)
DECLARE cmds CURSOR FOR
SELECT 'drop table [' + Table_Name + ']'
FROM INFORMATION_SCHEMA.TABLES
WHERE Table_Name LIKE 'prefix%'

OPEN cmds
WHILE 1 = 1
BEGIN
    FETCH cmds INTO @cmd
    IF @@fetch_status != 0 BREAK
    EXEC(@cmd)
END
CLOSE cmds;
DEALLOCATE cmds
 

这比使用生成脚本加运行的两步方法更清洁.但脚本生成的一个优点是它使您有机会在实际运行之前检查所有要运行的内容.

我知道,如果我打算对生产数据库这样做,我会尽可能小心。

编辑代码样本修复.

  相同标签的其他问题

sqlsql-serverdynamic-sql