我有一个包含许多表的数据库,其中许多表的名称都包含字母“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
答案 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
感谢大家的帮助!!!