将子查询的结果连接成单个值

时间:2018-05-04 18:27:00

标签: sql-server stored-procedures subquery

我有一个存储过程,我正在建立一个报告,我遇到了一个小问题,我希望得到解决。

存储过程只接受一个参数:

@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

1 个答案:

答案 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