[英]Passing Parameter in Stored Procedure 1
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'”。 请提出一些替代方案。
条件b.AgeBand in (@AgeBand)
不起作用,
尝试使用CHARINDEX(b.AgeBand,@AgeBand) > 0
您不能像这样将数组传递到存储过程中,因此请使用双引号(“)加倍
最好的选择是多次运行该过程(很糟糕,影响性能),或者使用自制的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的答案,但我认为表面活性剂应该是值得的...并且可能是更好的答案
我认为OP正在询问转义字符。
请尝试以下方法: Exec sp_Dialer_Analysis '''50-54'',''55-59''','F','Monday'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.