2011-12-12 65 views
-1

如果存储过程运行但我不能这样做,我想使某些表为空。我所做的是存储过程中的多重删除操作

create proc MakeEmpty () 
as 
begin 
    delete from table1 
    delete from table2 
delete from table3 
end 
+1

当您运行该存储过程时会发生什么? SQL看起来很好。 – jmacinnes

+1

为什么这个工作没有呢? – gbn

+0

Msg 102,Level 15,State 1,Procedure MakeEmpty,Line 4 ')'附近语法不正确。 –

回答

4

使用truncate,而不是和删除()这样的:

create proc MakeEmpty 
as 
begin 
    truncate table table1 
    truncate table table2 
    truncate table table3 
end 
+1

+1 - 但请注意,如果在表上定义了外键约束,则truncate将不可用。 –

+0

@IanNelson确实 –

+1

当然,这整个事情应该在一个try catch块和一个事务中,所以如果其中一个语句失败,所有的东西都会回滚。切勿在没有事务处理的情况下在proc中执行多次插入/更新/删除(截断计数为delte)。 – HLGEM

4

两件事情:

- 如果你正在申报的程序参数这些括号,才应使用。如果没有参数他们是不需要的。

- 如果你想清空表,那么你应该使用TRUNCATE - 这是最低限度记录和基本上是元操作,而不是一行一行地删除。

你需要澄清什么不工作,但这样的事情应该做的伎俩:

BEGIN 

IF EXISTS (SELECT 1 from DatabaseName.sys.Tables WHERE Name = 'Table1') 
TRUNCATE TABLE Databasename.dbo.Table1 

...repeat for other tables... 

END 
3

尝试删除在()

create proc MakeEmpty 
as 
begin 
    delete from table1; 
    delete from table2; 
    delete from table3; 
end 

但请确保table2table3未引用table1table3未引用table2