删除名称以某个字符串开头的所有表

新手上路,请多包涵

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

我认为这可以通过一些动态 SQL 和 INFORMATION_SCHEMA 表来完成。

原文由 Blorgbeard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 990
2 个回答

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

 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

这比使用生成脚本加运行的两步方法更干净。但是脚本生成的一个优点是它使您有机会在实际运行之前查看将要运行的全部内容。

我知道如果我要针对生产数据库执行此操作,我会尽可能小心。

编辑 代码示例已修复。

原文由 Curt Hagenlocher 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您的查询返回多行,您可以收集结果并将它们合并到一个查询中。

 declare @Tables as nvarchar(max) = '[schemaName].['
select @Tables =@Tables + TABLE_NAME +'],[schemaName].['
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
AND TABLE_SCHEMA = 'schemaName'
AND TABLE_NAME like '%whateverYourQueryIs%'

select @Tables =  Left(@Tables,LEN(@Tables)-13) --trying to remove last ",[schemaName].[" part, so you need to change this 13 with actual lenght

--print @Tables

declare @Query as nvarchar(max) = 'Drop table ' +@Tables

--print @Query

exec sp_executeSQL @Query

原文由 Arthur Cam 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进