删除集[DB]中的所有表数据。[audit]。[tables]

时间:2009-10-16 12:56:29

标签: sql sql-server-2005

所以,我有一个包含大约100个审计表的数据库,我希望最好在1个sql查询中清空它们。该数据库有2组表[audit]和[dbo]。我甚至不确定我应该将这些表格称为什么,因此从谷歌那里找到任何结果都很困难。

有什么建议吗?

2 个答案:

答案 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是一个博客条目,对此存储过程有更多用途。