我有一个存储过程,我正在建立一个报告,我遇到了一个小问题,我希望得到解决。
存储过程只接受一个参数:
@nID varchar(max)=null
此参数可以为NULL,有1个值=' 1'或多个值' 1,3'
我有一个分割功能,所以参数可能如下所示:' 1,3,5'将它变成' 1',' 3',' 5'。
这是我的select语句(子查询)
的一部分Select Value1,
(select tblIns.nDesc from tblIns where tblIns.nID in (SELECT items FROM
dbo.SplitFunction(@nID, ',', 'nID'))) as 'Description'
From ....
Where ....
只要我在参数@nID
中传递了1个值,查询就可以正常工作,但是,当我传递多个值时,我会收到以下错误:
子查询返回的值超过1。这是不允许的 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。
我的目标是,能够连接子查询结果,这样如果我传入的值超过1,'Description'
看起来就像这样
Text1, Text2, Text2
这样的事情是可行的吗?或者这会涉及更多的工作。
如果没有子查询,我可以将任意数量的值传递给SP并产生正确的结果,我只需要获取参数的TEXT描述并将它们全部连接在一列中。
编辑澄清:
tblIns
nID nDesc
1 Text1
2 Text2
我们说我传递价值观' 1,2'作为我在存储过程中的参数,我希望得到的结果是:
Value1 Description
Test Text1, Text2
答案 0 :(得分:1)
要将其转换为变量,这将在每个值和逗号分隔符周围放置单个qutes:
string = "stop emailing me"
list = string.split()
True if list[0] = 'stop' and list[1] = 'emailing' and list[2] = 'me' else False
- 或者你可以像这样内联:
DECLARE @OUTPUT as varchar(MAX)
Set @OUTPUT = ''
SELECT @OUTPUT = @OUTPUT + case when @OUTPUT = '' then '' else ', ' end + '''' + rtrim(TableValue) + ''''
FROM dbo.Table
select @OUTPUT