表值函数结合合并列值并带参

实例如下:

 

我有一个表;

ID Name 

1 wjy

2 abc

3 WWW


第二个表

ID RoleID MenuID
1 2 13

2 2 14

3 3 15

4 2 16



我对第二个表写的个表值函数;

ALTER FUNCTION [F_MenuID](@RoleID int) 
RETURNS TABLE 
AS
RETURN 
(
select RoleID, MenuID=stuff((select ','+rtrim(MenuID) from V1 t where RoleID=t.RoleID for xml path('')), 1, 1, '') 
from V1 
where RoleID=@RoleID group by RoleID
)
GO


运行:SELECT * FROM f_MENUID(2)

可以得到一个表:

RoleID MenuID
2 13,14,16



问题来的:


现在我想修改一下那个表值函数(同样是带那个RoleID的参数);

让它可以生成下面这样一张表:

当我运行时;SELECT * FROM f_MENUID(2)

返回表(就是第一个表的每条纪录都增加两列;):

ID Name MenuID RoleID

1 wjy 13,14,16 2

2 abc 13,14,16 2

3 WWW 13,14,16 2

实现代码如下:

 

 

alter FUNCTION [F_MenuIDs](@RoleID int)  
RETURNS @t TABLE(id int,name varchar(100),menuid varchar(100),roleid int)
AS
begin
insert into @t
select b.id,b.name,MenuID=stuff((select ','+rtrim(MenuID) from V1 t where RoleID=t.RoleID for xml path('')), 1, 1, '') 
  ,a.RoleID
from V1 a,t1 b
where a.RoleID=@RoleID 
group by a.RoleID,b.id,b.name
return
end
GO

posted @   踏浪帅  阅读(240)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示