在存储过程中传递参数1

时间:2017-05-16 12:18:46

标签: sql sql-server

SP未正确处理@AgeBand参数。 我如何传递该参数?

public MyClass(MyInterface myInterface) {}

  private MyInterface myInterface;
  ...
  public MyClass(MyInterface myInterface) {
    this.myInterface = myInterface;
  }

   public void doTest() {
       // do some processing
         ..
       // then delegate
      myInterface.doTest();
   }
}

"' 50-54'' 55-59'"是问题。 请提出一些替代方案。

3 个答案:

答案 0 :(得分:1)

条件b.AgeBand in (@AgeBand)无效,

尝试使用CHARINDEX(b.AgeBand,@AgeBand) > 0

答案 1 :(得分:0)

你不能将数组传递给那样的存储过程,加倍使用双引号(")

您最好的选择是多次运行该程序(yuck,性能命中)或使用自制的Split功能或Sql Server 2016中的新String_Split功能将阵列拆分出来

也许这样的事情(没有经过测试,脱离我的头脑)

Alter Procedure sp_Dialer_Analysis
    @AgeBand Varchar(50),
    @Gender Varchar(50),
    @Weekday Varchar(50)
AS
BEGIN

Select @AgeBand,@Gender,@Weekday,SUM(RPC)
from TableA a
Cross Apply String_Split(@AgeBand, ',') As s
left join TableB b
on a.[Contact Info] = b.MSI
where a.date >= '2017-01-01'
and b.gender = @Gender
And b.ageband = s.value
and DATENAME(WEEKDAY,a.date) = @Weekday

END

Exec sp_Dialer_Analysis '50-54,55-59','F','Monday'

没有尝试过SHD的答案,但我认为它应该得到优点......并且可能是一个更好的答案

答案 2 :(得分:0)

我认为OP正在询问转义字符。

请尝试:Exec sp_Dialer_Analysis '''50-54'',''55-59''','F','Monday'