将存储过程中的硬编码值替换为表中的值

时间:2015-07-16 13:29:04

标签: sql-server stored-procedures

我有一个存储过程,其中包含硬编码值(CASE statement)。现在这些硬编码值已存储在不同的表中,因此我希望从表中检索它们,而不是在存储过程中对它们进行硬编码。
换句话说,我想替换CASE中的值并从表中检索它们。我不知道怎么回事。
这是包含值的表。

编辑:表格中的值通常会发生变化。 (例如:假设我将other_value从25更改为35)。执行时,我希望存储过程从表中动态检索(当前是硬编码的值)。 (例如:值25将在存储过程中替换为35,因为它将在执行时动态更改)。我没有将10,25,30作为直接在存储过程中硬编码的值,而是用变量(?)替换它们,这些变量将包含我对这些值的表的当前内容。

enter image description here

CREATE    PROCEDURE [dbo].[sp_Update_Proc]
AS
BEGIN

Update dbo.MyTable
 set Nb1=0, Nb2=0, Nb3= b.TotalAmount, MaxValue =
   CASE   WHEN b.TotalAmount < 10                               THEN 25
          WHEN b.TotalAmount >= 10  and b.TotalAmount < 20      THEN 50
          WHEN b.TotalAmount >= 20  and b.TotalAmount < 30      THEN 100

   END

From  dbo.Client_stuff cmta
   INNER Join otherTable b
   ON b.someValue=cmta.someValue
        where yesInd=1

END

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是将参数传递给存储过程。我只能用你提供的东西来推测这一点。 以下是:

CREATE    PROCEDURE [dbo].[sp_Update_Proc] @int1 int , @int2 int
AS
BEGIN

Update dbo.MyTable
set Nb1=0, Nb2=0, Nb3= b.TotalAmount, MaxValue =
CASE   WHEN b.TotalAmount < @int1                               THEN 25
      WHEN b.TotalAmount >= @int1  and b.TotalAmount < @int2      THEN 50
      WHEN b.TotalAmount >= @int2  and b.TotalAmount < 30      THEN 100

END

From  dbo.Client_stuff cmta
INNER Join otherTable b
ON b.someValue=cmta.someValue
    where yesInd=1

END