我创建了以下存储过程:
ALTER PROCEDURE [dbo].[CountInJunction]
@Mod as nvarchar(10),
@Junction as nvarchar(10),
@PJ as nvarchar(10),
**@case as varchar(10)**,
@Date as varchar(20)
as
begin
declare @result as int
select @result = count(distinct CONCAT ([UCID],[CALLSEGMENT]))
from IVR_LINES
where MODULE = @Mod and DATE = @date
and EVENT_NAME = @Junction and **EVENT_VALUE in (@case)**
insert into [dbo].[MainJuncTable] values(@Mod,@PJ,@Junction,@case,@result,null,null,@date)
return @result
end
我想将('0','5')传递为 @case 。
由于某种原因,我得到0结果,这是不正确的。似乎SP没有正确解释('0','5')。 我一直在尝试多种组合,例如:
'0', '5'
'0' + ' '+ 5''
'0,5'
等。
无效。
有什么办法可以正确传递这些字符吗?
感谢。
答案 0 :(得分:0)
将值作为单个字符串发送,例如('0,5')
然后在需要拆分的情况下,选择像
这样的值where EVENT_VALUE in (select val from Split(@case,','))
Split是用户定义的函数,您需要在使用它之前创建。
CREATE FUNCTION [dbo].[Split]
(
@delimited nvarchar(max),
@delimiter nvarchar(100)
) RETURNS @t TABLE
(
-- Id column can be commented out, not required for sql splitting string
id int identity(1,1), -- I use this column for numbering splitted parts
val nvarchar(max)
)
AS
BEGIN
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'
insert into @t(val)
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)
RETURN
END
GO
答案 1 :(得分:0)
在每种情况下,请将此作为参数值:'0,5'
但是如何使用它取决于您正在使用的sql server的版本。
如果你有2016年,那就是STRING_SPLIT。 https://msdn.microsoft.com/en-us/library/mt684588.aspx
如果没有,可以创建一个功能。请参阅相关的stackoverflow帖子:How to split a comma-separated value to columns 或者如果您想要行:SQL query to split column data into rows
(参见两者中评分较高的建议。)