SQL查询从表中包含特定字符串的表中删除所有行

时间:2017-04-20 21:18:32

标签: sql-server

我有一个包含许多表的数据库,其中许多表的名称都包含字母“PMO”。我希望能够删除名称中包含字符串“PMO”的所有表中的所有行。因此,例如,从表“PMOThing”和“PMOOtherThing”中删除,但不从表“Thing”或“OtherThing”中删除。

修改

有人建议有一个重复的问题。它很接近,但并不完全。问题是如何删除名称中包含某个字符串的表。我不想放弃这些表;我想删除它们中的所有行,但保留表格。如果有人知道如何修改下面的代码(从建议的重复问题)来做我想做的事情,那就太酷了!

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

2 个答案:

答案 0 :(得分:2)

将其剪切/粘贴到您的查询窗口

select 'truncate table ' + quotename(OBJECT_SCHEMA_NAME(object_id)) + '.' + quotename(name)
from sys.tables
where name like '%PMO%'
order by name;

如果您希望自动执行此操作,请将管道结果放入表中,然后遍历表,逐个执行TSQL。

答案 1 :(得分:0)

所以,在结合可能的重复问题的代码和Greg的答案之后,这里的效果最好:

DECLARE @cmd varchar(4000)
DECLARE cmds CURSOR FOR
SELECT 'truncate table ' + quotename(OBJECT_SCHEMA_NAME(object_id)) + '.' + 
quotename(name)
FROM sys.tables
WHERE name like '%PMO%'
ORDER BY name;

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

感谢大家的帮助!!!