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 &lt;&gt; '')
      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'