2009-04-20 55 views
9

我想知道是否有可能有多个更新语句的存储过程中多个更新语句

事情是这样的:

Update Table1 set field1 = @new_value where id = @table1_id 

Update Table2 set field2 = @new_value where id = @table2_id 

Update Table3 set field3 = @new_value where id = @table3_id 

现在我执行它们seperately但他们只能一起使用,我想知道它们是否可以位于一个SP中。

+1

这是使用存储过程,添加事务和错误处理的一个原因,你有一个很好的解决方案 – 2009-04-20 13:43:23

回答

22

是的,这是可能的:

CREATE PROCEDURE prc_update (@table1_id INT, @table2_id INT, @table3_id INT, @new_value INT) 
AS 
BEGIN 
     UPDATE Table1 
     SET  field1 = @new_value 
     WHERE id = @table1_id 

     UPDATE Table2 
     SET  field2 = @new_value 
     WHERE id = @table2_id 

     UPDATE Table3 
     SET  field3 = @new_value 
     WHERE id = @table3_id 
END 
+0

哇,这有点尴尬,我当然试过这个,不断收到语法错误,并以某种方式得出它不是可能以这种方式,只是再试一次,完美的作品!谢谢:) – 2009-04-20 09:49:13

8

是的,工作正常。

更新之前也把这个存储过程:

set nocount on 

这使从查询产生的结果集没有结果的存储过程。否则,每次更新都会生成一个空的结果集,并将其发送回客户端。

6

您应该将这些陈述包含在交易中,以便在失败时全部回滚。