Kommagetrennte Liste als Parameter eines SQL Selects verwenden

Daniel Müller beschreibt in seinem Blog, wie man mittels einer User Defined Function (UDF) eine kommagetrennte Liste aufsplittet und als Table zurückgibt.
Ich hab’s ganz leicht abgewandelt:

CREATE Function [dbo].[fnSplitNVarCharToInt] (@ids nvarchar(max) )
RETURNS @tblIds TABLE (id int) AS

BEGIN
-- Append comma
SET @ids = @ids + ','

-- Indexes to keep the position of searching
DECLARE @pos1 int
DECLARE @pos2 int

-- Start from first character
SET @pos1=1
SET @pos2=1

WHILE @pos1<Len(@ids)
BEGIN
SET @pos1 = charindex(',',@ids,@pos1)
INSERT @tblIds SELECT cast(substring(@ids,@pos2,@pos1-@pos2) AS int)
-- Go to next non comma character
SET @pos2=@pos1+1
-- Search from the next charcater
SET @pos1 = @pos1+1
END
RETURN
END

So sähe dann z.B. die Anwendung aus:
DECLARE @ids nvarchar(max)
SET @ids='1,2,3,4,5,6,9,7,8 ,-1 '
SELECT * FROM [dbo].[fnSplitNVarCharToInt] (@ids) ORDER BY 1

Also ich find's brauchbar.

Advertisements

Schlagwörter:

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: