Wenn Sie eine schnelle Ad-hoc-Lösung für häufige Fälle mit minimalem Code benötigen, ist dieser rekursive CTE-Zweiliner genau das Richtige für Sie:
DECLARE @s VARCHAR(200) = ',1,2,,3,,,4,,,,5,'
;WITH
a AS (SELECT i=-1, j=0 UNION ALL SELECT j, CHARINDEX(',', @s, j + 1) FROM a WHERE j > i),
b AS (SELECT SUBSTRING(@s, i+1, IIF(j>0, j, LEN(@s)+1)-i-1) s FROM a WHERE i >= 0)
SELECT * FROM b
Verwenden Sie dies entweder als eigenständige Anweisung oder fügen Sie einfach die oben genannten CTEs zu einer Ihrer Abfragen hinzu, und Sie können die resultierende Tabelle bmit anderen verknüpfen, um sie in weiteren Ausdrücken zu verwenden.
bearbeiten (von Shnugo)
Wenn Sie einen Zähler hinzufügen, erhalten Sie zusammen mit der Liste einen Positionsindex:
DECLARE @s VARCHAR(200) = '1,2333,344,4'
;WITH
a AS (SELECT n=0, i=-1, j=0 UNION ALL SELECT n+1, j, CHARINDEX(',', @s, j+1) FROM a WHERE j > i),
b AS (SELECT n, SUBSTRING(@s, i+1, IIF(j>0, j, LEN(@s)+1)-i-1) s FROM a WHERE i >= 0)
SELECT * FROM b;
Das Ergebnis:
n s
1 1
2 2333
3 344
4 4