SQL: получение CSV из View с использованием функции - PullRequest
0 голосов
/ 26 ноября 2010

Я начал с ответа на этот вопрос .

Я решил, что хочу получить информацию (пользователи, роли CSV для каждого пользователя) из представления. Представлению не понравился синтаксис XML WITH / FOR, поэтому я решил поместить эту часть в функцию.

Вид выглядит примерно так:

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 Ответ

1 голос
/ 26 ноября 2010

Как заметил @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...