Sie könnten es als durch Kommas getrennte Liste übergeben, dann eine Split-Funktion verwenden und mit den Ergebnissen verbinden.
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
SELECT Item = CONVERT(INT, Item)
FROM
(
SELECT Item = x.i.value('(./text())[1]', 'INT')
FROM
(
SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a
CROSS APPLY
[XML].nodes('i') AS x(i)
) AS y
WHERE Item IS NOT NULL
);
Jetzt Ihre gespeicherte Prozedur:
CREATE PROCEDURE dbo.doStuff
@List VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT cols FROM dbo.table AS t
INNER JOIN dbo.SplitInts(@List, ',') AS list
ON t.ID = list.Item;
END
GO
Um es dann zu nennen:
EXEC dbo.doStuff @List = '1, 2, 3, ...';
Einige Hintergrundinformationen, andere Optionen und Leistungsvergleiche finden Sie hier:
- Strings richtig aufteilen – oder auf die nächstbeste Art Weg
- Strings aufteilen:Eine Nachbereitung
- Strings aufteilen:Jetzt mit weniger T-SQL
- Vergleich von String-Splitting-/Verkettungsmethoden
- Verarbeitung einer Liste von ganzen Zahlen:mein Ansatz
- Aufteilen einer Liste von ganzen Zahlen:eine weitere Zusammenfassung
- Mehr zum Aufteilen von Listen:benutzerdefinierte Trennzeichen, Vermeidung von Duplikaten und Beibehaltung der Reihenfolge
- Entfernen Duplikate von Strings in SQL Server
Auf SQL Server 2016 oder höher sollten Sie sich jedoch STRING_SPLIT()
und STRING_AGG()
:
- Leistungsüberraschungen und Annahmen:STRING_SPLIT()
- STRING_SPLIT() in SQL Server 2016 :Follow-Up Nr. 1
- STRING_SPLIT() in SQL Server 2016:Follow-Up Nr. 2
- SQL Server v.Next :STRING_AGG()-Leistung
- Lösen Sie alte Probleme mit den neuen Funktionen STRING_AGG und STRING_SPLIT von SQL Server