Пожалуйста, ПОЖАЛУЙСТА, избегайте ссылок на системные таблицы, особенно системные таблицы в системных базах данных. Фактически, выбранный выше ответ, вероятно, не будет компилироваться в проекте базы данных Visual Studio 2013
Табличные переменные в порядке, но рекурсия с CTE является ответом:
DECLARE @str VARCHAR(max)
SET @str = 'QWERTY AnotherWord'
WITH Split(stpos,endpos)
AS(
SELECT 1 AS stpos, 2 AS endpos
UNION ALL
SELECT endpos, endpos+1
FROM Split
WHERE endpos <= LEN(@str)
)
SELECT
'character' = SUBSTRING(@str,stpos,COALESCE(NULLIF(endpos,0),LEN(@str)+1)-stpos)
,'charindex' = stpos
FROM Split
Тем не менее, использование приведенного выше кода состоит в том, чтобы получить таблицу, полную букв, представляющих различные разрешения для пользователя. Это не способ сделать это. Создайте таблицу с идентификатором, кодом разрешения и описанием, а затем создайте таблицу связи между таблицей пользователей и новой таблицей разрешений. это дает вам те же способности и не заставляет вас решать глупые проблемы, подобные этой.