T-SQL Quickies: Arrays an gespeicherte Prozeduren übergeben
Dieses Beispiel zeigt, wie Sie Array-Parameter an gespeicherte Prozeduren übergeben
können. Das Beispiel-Script erstellt die Prozedur "GetCustomers", die
alle Datensätze aus der Tabelle Customers liefert, deren Primärschlüssel
im angegebenen Array enthalten ist.
CREATE PROCEDURE dbo.GetCustomers
@idList NVARCHAR(MAX)
AS
DECLARE @tmp TABLE (id UNIQUEIDENTIFIER)
DECLARE @id NVARCHAR(36), @pos INT
DECLARE @list NVARCHAR(MAX)
SET @list = @idList
SET @list = LTRIM(RTRIM(@list))+ ','
SET @Pos = CHARINDEX(',', @list, 1)
IF REPLACE(@list, ',', '') <> ''
BEGIN
WHILE (@pos > 0)
BEGIN
SET @id = LTRIM(RTRIM(LEFT(@list, @pos - 1)))
IF (@id <> '')
BEGIN
-- PRINT @id
INSERT INTO @tmp (id)
VALUES (@id)
END
SET @list = RIGHT(@list, LEN(@list) - @pos)
SET @pos = CHARINDEX(',', @list, 1)
END
END
SELECT c.id
FROM dbo.Customers c INNER JOIN
@tmp t ON c.id = t.id
Ich habe diese Prozedur ursprünglich
für eine einfache O/R-Mapper-Implementierung geschrieben - die Leistungsfähigkeit
der Abfrage war dabei weniger wichtig; unter Gesichtspunkten der Performance ist dies
sicher nicht die beste Lösung, aber ich finde Sie dennoch nützlich... Und so kann
die Prozedur verwendet werden; das Array wird einach als komma-separierte Liste
übergeben.
EXEC GetCustomers N'F6306321-231A-42cd-B3FD-DAF59607AFB3, B133955F-5F5B-4029-8104-27673D28DC3D'