从存储过程返回一个列值作为列表

本文关键字:列表 一个 返回 存储过程 | 更新日期: 2023-09-27 17:51:04

是否可以直接从MSSQL返回这样的数据结构?

public class MyClass
{
       public int Id {get; set;}
       public int List<int> AnotherIds {get; set;}
}

我需要这个来检索数据列表,如果Id是重复的例如:Select * FROM MyTable

--------------------
|   Id    | AnthId |
|   1     |   1    |
|   1     |   2    |
|   1     |   3    |
|   2     |   1    |
|   2     |   2    |
|   2     |   3    |
|   2     |   4    |
--------------------

结果将是2个实体的列表:MyClass[0]{1,(1、2、3)}MyClass[1]{2,}(1、2、3、4)

从存储过程返回一个列值作为列表

是有可能的。我包括一个示例,您可以复制/粘贴到您的查询窗口,并使用这个示例构建您的SQL返回所需的数据:

declare @tbl table(ID int, AnotherID int)
declare @aa varchar (200)
declare @result table(ID int, AnotherIDs varchar(200))
set @aa = ''
insert into @tbl (ID, AnotherID) Values(1,1)
insert into @tbl (ID, AnotherID) Values(1,2)
insert into @tbl (ID, AnotherID)Values(1,3)
insert into @tbl (ID, AnotherID) Values(1,4)
insert into @tbl (ID, AnotherID) Values(2,1)
insert into @tbl (ID, AnotherID) Values(2,2)
insert into @tbl (ID, AnotherID) Values(2,3)
insert into @tbl (ID, AnotherID) Values(2,4)
--select * from @tbl

declare @i int
select @i = min(ID) from @tbl
declare @max int
select @max = max(ID) from @tbl
while @i <= @max begin
select   @aa = 
        coalesce (case when @aa = ''
                       then CAST(AnotherID as varchar)
                       else @aa + ',' + CAST(AnotherID as varchar)
                   end
                  ,'')
      from @tbl where ID=@i
insert into @result(ID, AnotherIDs)
values(@i, @aa)
        set @aa=''
set @i = @i + 1
end
select * from @result

结果如下:
ID AnotherIDs
1 1、2、3、4
2 1、2、3、4