Array an eine Stored Procedure übergeben

Ein Array kann man bekannter Maßen nicht an eine Stored Procedure übergeben. Notnagel wäre an dieser Stelle eine kommaseparierte Liste von String-Parametern als IN-Parameter.

Einen interessanten Ansatz dazu hat Daniel Müller in seinem .NET – Software & DotNetNuke (DNN) Blog gefunden. Mittels einer User Defined Function(UDF) macht er aus den nvarchar Parameter eine „Tabelle“, die er dann ohne ohne Probleme mit dem IN Parameter verarbeiten kann.

Natürlich ist hier nicht nur ein select-Statement denkbar. Mittels einem Cursor läßt sich mit dem Ergebnis auch eine weitere Stored Procedure ansprechen und die gefunden Daten z.B. in eine andere Tabelle abspeichern.


SET @ItemIDs = '1,2,3,4,5,6,7'
SET @MitarbeiterID = '23'

DECLARE Item_cursor CURSOR FOR
SELECT @MitarbeiterID AS MitarbeiterID, [id] AS @ItemID from fn_Split_varcharToint(@ItemIDs)

OPEN Item_cursor

-- Perform the first fetch.
FETCH NEXT FROM Item_cursor
INTO @MitarbeiterID, @ItemIDs

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@MitarbeiterID != 0 AND @ItemIDs != 0)
BEGIN
EXEC My_Custom_Stored_Procedure @MitarbeiterID, @ItemIDs
END
FETCH NEXT FROM Item_cursor
INTO @MitarbeiterID, @ItemIDs
END

CLOSE Item_cursor
DEALLOCATE Item_cursor

Zugegeben, ein Cursor ist nicht gerade etwas, was man häufig verwenden sollte, aber dieses Blog ist ja auch kein SQL Lehrbuch *G*