Вот способ без функции:
SELECT DISTINCT SU.UserID, SU.Name, SU.Enabled
FROM dbo.Sec_User AS SU
INNER JOIN dbo.Program_Access AS PA
ON ',' + PA.usersIDs + ',' LIKE '%,' + RTRIM(SU.UserID) + ',%';
Но включая функцию для полноты (и потому, что такая функция очень полезна для многих целей).Сначала создайте табличную функцию:
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN ( SELECT Item = CONVERT(INT, Item) FROM (
SELECT Item = x.i.value('(./text())[1]', 'int') FROM (
SELECT [XML] = CONVERT(XML, '<i>' + REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.') ) AS a CROSS APPLY [XML].nodes('i') AS x(i)) AS y
WHERE Item IS NOT NULL
);
Теперь JOIN:
SELECT DISTINCT SU.UserID, SU.Name, SU.Enabled
FROM dbo.Program_Access AS PA
CROSS APPLY dbo.SplitInts(PA.usersIDs, ',') AS s
INNER JOIN dbo.Sec_User AS SU
ON SU.UserID = s.Item;