• select Roleid from Roles where Inboxenabled ='y' will return me Admin and Dev roles

    How will this only return Admin and Dev, if networking is 'y' in your test data? The returned data should be Admin, Dev, and networking.. correct?

    I agree with Andras that table redesign is the best and most effiecient option. If you must use the current design, you can do something like this.

    SELECT UserId

    FROM users a INNER JOIN roles b ON a.roles LIKE '%' + b.roleid + '%'

    WHERE b.Inboxenabled ='y'

    GROUP BY UserId

    HAVING COUNT(b.roleid) =

    (SELECT COUNT(RoleId)

    FROM @roles

    WHERE Inboxenabled ='y')