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

实例如下:

 

我有一个表;

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 @ 2011-09-05 21:42  踏浪帅  阅读(235)  评论(0编辑  收藏  举报