Sql 在存储过程1中传递参数

Sql 在存储过程1中传递参数,sql,sql-server,Sql,Sql Server,SP未正确处理@AgeBand参数。 如何传递该参数 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 left join TableB b on a.[Contact Info] = b.MSI

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

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
left join TableB b
on a.[Contact Info] = b.MSI
where a.date >= '2017-01-01'
and b.gender = @Gender and b.AgeBand in (@AgeBand)
and DATENAME(WEEKDAY,a.date) = @Weekday

END

Exec sp_Dialer_Analysis "'50-54','55-59'",'F','Monday'
“50-54”和“55-59”是问题所在。
请推荐一些替代方法。

您不能像这样将数组传递到存储过程中,使用双引号是双重的

您的最佳选择是多次运行该过程(糟糕、性能不佳),或者使用自制的拆分函数或Sql Server 2016中的新字符串拆分函数拆分阵列

也许像这样的东西没有经过测试,从我的头顶上

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的答案,但表面上看,我认为它值得表扬。。。并且可能是更好的答案

条件b.@AgeBand中的AgeBand将不起作用


尝试使用CHARINDEXb.AgeBand,@AgeBand>0

我想OP是在询问转义字符


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

Hmmm。查询正确处理了年龄段。你只是在期待错误的事情。您正在以字符串形式传入一个值。是否要在两个ageBand值周围都加上单引号?否则,您需要传递两个值。因此,不要调用您的过程。阅读更多信息我的问题是,我们可以在存储过程中的X、Y、Z中使用AgeBand吗?它的工作原理类似于字符串分割,它将检查字符串中的字符索引。@SHD-真棒的一个亲爱的:DSTRING_分割是Rachel告诉我们的正确方法,但它只支持2016,否则我们需要创建自定义函数。