一个StoredProcedure中的多个更新语句

The*_*ter 9 sql stored-procedures

我想知道是否可以在存储过程中有多个Update语句

像这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

现在我正在单独执行它们,但由于它们只是一起使用,我想知道它们是否只能位于一个SP中.

Qua*_*noi 25

是的,这是可能的:

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
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 9

是的,这很好.

还要在更新之前将其放在存储过程中:

set nocount on
Run Code Online (Sandbox Code Playgroud)

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


HLG*_*GEM 6

您应该将这些状态包装在事务中,以便在一个失败时将所有状态都回滚.