Несколько операторов обновления в одной StoredProcedure - PullRequest
9 голосов
/ 20 апреля 2009

Мне интересно, возможно ли иметь несколько операторов 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

Сейчас я выполняю их отдельно, но так как они используются только вместе, мне интересно, могут ли они быть расположены только в одном SP.

Ответы [ 3 ]

24 голосов
/ 20 апреля 2009

Да, это возможно:

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
9 голосов
/ 20 апреля 2009

Да, отлично работает.

Также поместите это в хранимую процедуру перед обновлениями:

set nocount on

Это позволяет хранимым процедурам не создавать наборы результатов для запросов без результата. В противном случае каждое обновление будет давать пустой набор результатов, который отправляется обратно клиенту.

6 голосов
/ 20 апреля 2009

Вы должны также обернуть эти отчеты в транзакции, чтобы в случае неудачи все откатывались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...