所以,我有一个包含大约100个审计表的数据库,我希望最好在1个sql查询中清空它们。该数据库有2组表[audit]和[dbo]。我甚至不确定我应该将这些表格称为什么,因此从谷歌那里找到任何结果都很困难。
有什么建议吗?
答案 0 :(得分:4)
您可以找到具有特定模式名称的所有表,如:
select name from sys.tables where schema_name(schema_id) = 'audit'
使用游标,您可以迭代这些表,并使用TRUNCATE TABLE清空它们:
use db
declare @query nvarchar(max)
declare @tablename nvarchar(max)
declare @curs cursor
set @curs = cursor for select name from sys.tables
where schema_name(schema_id) = 'audit'
open @curs
fetch next from @curs into @tablename
while @@FETCH_STATUS = 0
begin
set @query = N'truncate table audit.' + @tablename
exec sp_executesql @query
fetch next from @curs into @tablename
end
close @curs
deallocate @curs
如果要删除表格,请使用:
set @query = N'drop table audit.' + @tablename
答案 1 :(得分:2)
您还可以使用sp_msforeachtable存储过程。 它允许您对当前数据库中的每个用户表执行查询。
例如,以下内容将截断数据库中的所有用户表
Use YourDB
Exec sp_msforeachtable 'TRUNCATE TABLE ?'
这将截断指定数据库中属于审计模式的所有用户表。
Use YourDB
Exec sp_msforeachtable @command1 = '
if (Select Object_Schema_name(object_id(''?''))) = ''dbo''
Begin
TRUNCATE TABLE ?
print ''truncated '' + ''?''
End
'
此外,Here是一个博客条目,对此存储过程有更多用途。