繁体   English   中英

存储过程1中的传递参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM