SQL:使用函数从视图中检索CSV
问题描述:
我以this question的答案开始。SQL:使用函数从视图中检索CSV
我决定要从视图中检索信息(用户,每个用户的CSV角色)。该视图不喜欢WITH/FOR XML的语法,因此我决定将该部分放入函数中。
的观点看起来是这样的:
SELECT u.UserId, u.UserName, dbo.GetRolesCsvFromUserId(u.UserId)
FROM Users u
我成功达到去除后面的逗号点。这是功能。我如何从这个函数内删除尾部的逗号?
CREATE FUNCTION [dbo].[GetRolesCsvFromUserId] (@UserId int)
RETURNS nvarchar(100) AS
BEGIN
RETURN
(
SELECT r.RoleName + ',' AS 'data()'
FROM Roles r INNER JOIN UsersInRoles ur ON ur.RoleId = r.RoleId
WHERE ur.UserId = @UserId FOR XML PATH('')
)
END
答
正如@OMG Ponies指出的那样,他的解决方案无需功能即可解决您的问题。不过,如果你需要创建一个函数,你可以不用XML PATH
。试试这个:
CREATE FUNCTION [dbo].[GetRolesCsvFromUserId] (@UserId int)
RETURNS nvarchar(100) AS
BEGIN
DECLARE @Return nvarchar(100)
SET @Return = ''
SELECT @Return = @Return + r.RoleName + ','
FROM Roles r INNER JOIN UsersInRoles ur ON ur.RoleId = r.RoleId
WHERE ur.UserId = @UserId
SET @Return = LEFT(@Return,LEN(@Return)-1)
RETURN
(
@Return
)
END
也许你应该读下一个最大的投票答案这个问题... – 2010-11-25 22:07:04
@OMG小马,我试图让您的解决方案的工作,但没有运气。我不确定问题是什么或如何解决 - 这就是为什么我选择了最高票数的答案。我再次花了最后20分钟试图让它工作,但没有任何运气。 – 2010-11-25 22:27:12