【发布时间】:2021-11-26 21:48:27
【问题描述】:
目前,我正在尝试从我的数据库中删除多个表。但只有那些名称以特定字符串开头或表名称完全符合我的通配符/下划线标准的那些。
在 Oracle 中,我使用了类似的东西,我正在 SQL Server Management Studio 中寻找与之等效的东西:
begin
for i in (select TABLE_NAME
from USER_TABLES
where TABLE_NAME = 'TABLE_____NAME'
)
loop
execute immediate 'DROP TABLE '||i.TABLE_NAME||' CASCADE CONSTRAINTS PURGE';
end loop;
end;
当我开始使用 SQL Server 时,我开始意识到,SQL Server 不提供简单循环。
我设法创造了这样的东西:
SELECT 'IF OBJECT_ID(''' +TABLE_NAME + ''') IS NOT NULL BEGIN DROP TABLE [' + TABLE_NAME + '] END;' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'TABLE_____NAME'
...这至少给了我一个复制粘贴的列表。我认为上面的解决方案在检查对象 ID 方面是一种过度杀伤,但它工作正常。我不确定是否需要检查 Object id。
最后,我正在寻找一个更简单的解决方案,主要是针对我在 Oracle 中使用的类似循环的解决方案。我永远不知道它会有多少张桌子,所以计数器解决方案(我在研究期间经常发现)不是一种选择(至少据我所知)。
有什么想法吗?提前谢谢你。
有谁知道如何在 SQL Server 中实现 Oracle 循环工作
【问题讨论】:
-
WHILE看起来很简单? -
一个游标也可以用来做这个,不是那么简单,但它会工作
标签: sql sql-server tsql