簡體   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