如何在SQL Server的存储过程中手动互换语句的执行

时间:2018-11-03 07:20:54

标签: sql sql-server tsql

我在一个存储过程中有8条以上的更新语句。要求可能是他们可能是不同的场景,一旦我想执行1,2,3,4,5,6,7,8th语句,第二次执行3,8,5,4,1,2,7,6th语句,就像这样……我可以使用if条件,但是在每个if条件中,我必须使用8个以上的update语句,并且我必须对每个条件都进行更新。这是一个非常长的过程...所以我们可以在while循环中使用while吗?如何在SQL Server中实现这一目标?

示例:- 创建proc sp_a @condition 一开始 如果@ conditon ='abc' 更新语句1,2,3,4,5,6,7,8 如果@condition ='xyz' 更新语句5,4,3,7,2,1,8,6 如果@condition ='pqr' 更新语句8,3,7,5,4,2,6,1 。 。 。 。 。 。 .so on ... 结束

1 个答案:

答案 0 :(得分:0)

这是一个建议。假设您的更新过程称为“ ProcUpdate”。对其进行如下修改:

  • 在过程中添加一个参数@RunStep INT。
  • 在第一个更新语句之前,添加“ IF @RunStep = 1 BEGIN”
  • 在第一条和第二条更新语句之间添加“ END ELSE IF @RunStep = 2 BEGIN”
  • ...等等...
  • 最后一条更新语句后,添加“ END”

ProcUpdate最终看起来像这样...

create procedure ProcUpdate @RunStep int, ... other params ...
as begin
    if @RunStep = 1 begin
        ... first update here ...
    end
    else if @RunStep = 2 begin
        ... second update here ...
    end
    ... repeat the pattern as needed
end;

接下来,创建一个包装存储过程,我们将其称为“ WrapperUpdate”。看起来像这样...

create procedure dbo.WrapperUpdate @Condition NVARCHAR(20)
as begin
    if @Condition = 'abc' begin
        execute ProcUpdate 1;
        execute ProcUpdate 2;
        execute ProcUpdate 5;
        ... whatever sequence is called for ...
    end
    else if @Condition = 'def' begin
        execute ProcUpdate 2;
        execute ProcUpdate 5;
        execute ProcUpdate 3;
        ... whatever sequence is called for ...
    end
    ... repeat the pattern as necessary ...
end;

如果不同的更新需要不同的参数,会变得更加复杂,但是想法是相同的。