如何将列数据作为逗号分隔的字符串从存储过程发送?

时间:2016-09-01 14:33:23

标签: c# sql-server linq tsql asp.net-mvc-5

两部分问题

我会尽力解释这个问题。

第1部分

我有一个看起来像这样的表:

enter image description here

最后两行对于类型和UrlId是相同的。

我有一个我调用的SP执行以下查询以获取上面的数据:

SELECT Urlid, DomainName, OrgId, DomainId, s.TypeId AS TypeId
FROM DomainData d
JOIN SystemUrls s ON s.DomainId = d.Id
WHERE @OrgId IS NULL OR  OrgId = @OrgId 

如何制作数据?

Name(varchar)   OrgId(bigint)        DomainId(bigint)  TypeId(int)
Three            556548-4499             71              2,1

第2部分

假设我不改变上述结果并决定使用linq-query(C#)在服务器上更改

linq查询如何为我提供所需的结果?

3 个答案:

答案 0 :(得分:1)

对于第1部分 - 然后查看this question。有人在我面前回答,所以我不会重复:)

对于第2部分 - 将其拆分为2部分 - 第一部分是选择联合数据,然后将其存入内存(ToList())后,可以使用string.Join连接所有{{1} }}Š

TypeId

答案 1 :(得分:1)

看看这对你有用:
注意:我正在考虑Urlid,DomainName,OrgId,DomainId属于“DomainData”而Id,TypeId属于“SystemUrls”表。

    SELECT  DomainName, OrgId, Id, 
    STUFF(( SELECT  ', ' + cast(s2.TypeId as varchar(5))
                    FROM    SystemUrls AS s2 
                    WHERE   s2.DomainId = d.Id
                    FOR XML PATH('')
                ), 1, 2, '') as TypeId

    FROM DomainData d
    WHERE @OrgId IS NULL OR  OrgId = @OrgId 
    GROUP BY DomainName, OrgId, Id

答案 2 :(得分:-2)

首先创建临时表, 当你想要所有长字符串格式的数据类型和大小都可以生效时,并且具有预期范围的声明,所以请确保这一点。

然后,

  insert into #temp(
  Urlid, DomainName, OrgId, DomainId, s.TypeId)
  SELECT Urlid, DomainName, OrgId, DomainId, s.TypeId
  FROM DomainData d
  JOIN SystemUrls s ON s.DomainId = d.Id
  WHERE @OrgId IS NULL OR  OrgId = @OrgId 

 declare @Column1 varchar(350),
 select @Column1= coalesce(@Column1+',','')+convert(varchar(30),TypeId )
 from #temp

update #temp
set Typeid=@column1
from #temp

select * from #temp

顺便回答此问题的方式尽量不要创建重复的条目这是链接:click here