代码之家  ›  专栏  ›  技术社区  ›  Ed Sinek

SQL:使用函数从视图中检索CSV

  •  0
  • Ed Sinek  · 技术社区  · 14 年前

    我首先回答 this question .

    我决定从一个视图中检索信息(用户,每个用户的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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Lamak    14 年前

    正如@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