2

2 つのテーブルを更新するストアド プロシージャがあります。最初のテーブルは常に同じテーブルですが、2 番目のテーブルは渡されるパラメーターに応じて変化します。このように 1 つの大きな手順にすべてを書き込む方が効率的ですか?

CREATE PROCEDURE MyBigProc
    @id int
    @param int,
    @value1 int,
    @value2 int
AS
BEGIN
    SET NOCOUNT ON;

    -- First table to update
    UPDATE MyTable SET field1 = @value1 WHERE id = @id

    -- Then choose which table to update based on @param
    IF @param = 1
       UPDATE MySecondTable SET field2 = @value2 WHERE id = @id

    IF @param = 2
       UPDATE MyThirdTable SET field2 = @value2 WHERE id = @id
END

または、テーブルごとに個別のプロシージャを作成し、メイン プロシージャから EXEC プロシージャを呼び出す必要があります。

サブテーブルを更新したいがメインテーブルを更新したくない場合など、後者の方が柔軟性があると思いますか?

4

4 に答える 4

1
CREATE PROCEDURE MyBigProc 
    @id int,
    @param int,
    @value1 int,
    @value2 int
AS
BEGIN
    SET NOCOUNT ON;

    -- First table to update
    UPDATE MyTable SET field1 = @value1 WHERE id = @id;

    -- Then choose which table to update based on @param
    IF @param = 1     
        exec SP_MySecondTable @id,@value2;
    IF @param = 2
       exec SP_MyThirdTable @id,@value2;
END

CREATE PROCEDURE SP_MySecondTable
    @id int, 
    @value2 int
AS
BEGIN  
    UPDATE MySecondTable SET field2 = @value2 WHERE id = @id;
END

CREATE PROCEDURE SP_MyThirdTable
    @id int, 
    @value2 int
AS
BEGIN  
  UPDATE MyThirdTable SET field2 = @value2 WHERE id = @id;
END
于 2012-07-12T04:31:50.540 に答える
1

サブテーブルを更新したいがメインテーブルを更新したくない場合など、後者の方が柔軟性があると思いますか?

まさに、作業を 2 つの別個の proc に分割する十分な理由があります。それがあなたにとって他のすべてのことにとって理にかなっているとしたら、そのアプローチに従わない理由がわかりません.

実行しない理由として考えられるのは、両方の更新を同時に成功または失敗させる必要がある場合です。このようなシナリオでは、すべてを 1 つの proc に残し、すべてを 1 つのトランザクションに含めます。

于 2012-07-12T04:21:18.050 に答える
0

さまざまなストアドプロシージャを用意して、それらすべてを1か所で呼び出すことをお勧めします。メンテナンス作業を行う際に大いに役立ちます。

于 2012-07-12T04:25:18.090 に答える