Вернуть индекс/данные списка (declare @list) при выборке (select) из списка

  • Microsoft Sql Management studio

необходимо просмотреть права пользователя по страницам (есть ли у Коли право видеть одну из страниц или все сразу (page1, page2, page3, page4, page5)) показать список разрешимых страниц

я решила создать список id возможных страниц, которые я знаю и вписываю вручную и потом из таблицы 'пользовательские права' поискать id пользователя и id страницы, если есть данные показать (к примеру в таблице записывают Yes и No, и я ищу все строки с Yes относящиеся к Коле и странице x из списка)

procedure sql

ALTER PROCEDURE GetUserPageAcces
    -
@UserId int
AS
BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @ListPage table (IdPage int, PageName vacrchar(max))
    INSERT INTO @ListPage VALUES (1, 'page1'), (2, 'page2'), (3, 'page3'), (4, 'page4'), (5, 'page5')
    
    -- Insert statements for procedure here
    SELECT SomePropertyAcces AS Access FROM MyTableWithUser
    WHERE UserId = @UserId AND PageId IN (select Id from @ListPage) AND SomePropertyAcces = 'YES'
    --return @ListPage
    

на выходе

    Access   
    YES
    YES

а как можно вернуть данные этого листа ListPage

чтоб на выходе было =>

    Access   PageName 
    YES      page2
    YES      page3  

я попыталась join-ом, потом попыталась создать таблицу #into, но уменя не получается, и возможно вообще это не так делают ?

я могу показать Id (взятое из таблицы MyTableWithUser), но мне нужно именно название страницы => page1, а не 1


Ответы (1 шт):

Автор решения: Alexander Petrov

Используем JOIN:

SELECT SomePropertyAcces AS Access, PageName
FROM MyTableWithUser
JOIN @ListPage ON PageId = IdPage
WHERE UserId = @UserId AND SomePropertyAcces = 'YES'
→ Ссылка