如果存储过程运行但我不能这样做,我想使某些表为空。我所做的是存储过程中的多重删除操作
create proc MakeEmpty ()
as
begin
delete from table1
delete from table2
delete from table3
end
如果存储过程运行但我不能这样做,我想使某些表为空。我所做的是存储过程中的多重删除操作
create proc MakeEmpty ()
as
begin
delete from table1
delete from table2
delete from table3
end
使用truncate
,而不是和删除()
这样的:
create proc MakeEmpty
as
begin
truncate table table1
truncate table table2
truncate table table3
end
+1 - 但请注意,如果在表上定义了外键约束,则truncate将不可用。 –
@IanNelson确实 –
当然,这整个事情应该在一个try catch块和一个事务中,所以如果其中一个语句失败,所有的东西都会回滚。切勿在没有事务处理的情况下在proc中执行多次插入/更新/删除(截断计数为delte)。 – HLGEM
两件事情:
- 如果你正在申报的程序参数这些括号,才应使用。如果没有参数他们是不需要的。
- 如果你想清空表,那么你应该使用TRUNCATE
- 这是最低限度记录和基本上是元操作,而不是一行一行地删除。
你需要澄清什么不工作,但这样的事情应该做的伎俩:
BEGIN
IF EXISTS (SELECT 1 from DatabaseName.sys.Tables WHERE Name = 'Table1')
TRUNCATE TABLE Databasename.dbo.Table1
...repeat for other tables...
END
尝试删除在(
和)
create proc MakeEmpty
as
begin
delete from table1;
delete from table2;
delete from table3;
end
但请确保table2
和table3
未引用table1
和table3
未引用table2
当您运行该存储过程时会发生什么? SQL看起来很好。 – jmacinnes
为什么这个工作没有呢? – gbn
Msg 102,Level 15,State 1,Procedure MakeEmpty,Line 4 ')'附近语法不正确。 –