Je zou het kunnen doorgeven als een door komma's gescheiden lijst, dan een splitsingsfunctie gebruiken en meedoen tegen de resultaten.
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
);
Nu uw opgeslagen procedure:
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
Om het dan te noemen:
EXEC dbo.doStuff @List = '1, 2, 3, ...';
U kunt hier wat achtergrondinformatie, andere opties en prestatievergelijkingen zien:
- Split strings op de juiste manier - of de volgende beste manier
- Snaren splitsen:een vervolg
- Strings splitsen:nu met minder T-SQL
- methoden voor het splitsen / samenvoegen van tekenreeksen vergelijken
- Een lijst met gehele getallen verwerken:mijn aanpak
- Een lijst met gehele getallen splitsen:nog een samenvatting
- Meer over het splitsen van lijsten:aangepaste scheidingstekens, het voorkomen van duplicaten en het handhaven van de volgorde
- Verwijderen Duplicaten van strings in SQL Server
Op SQL Server 2016 of hoger moet je echter kijken naar STRING_SPLIT()
en STRING_AGG()
:
- Prestatieverrassingen en veronderstellingen:STRING_SPLIT()
- STRING_SPLIT() in SQL Server 2016:Opvolging #1
- STRING_SPLIT() in SQL Server 2016:vervolg #2
- SQL Server v.Next :STRING_AGG() prestaties
- Oude problemen oplossen met de nieuwe STRING_AGG- en STRING_SPLIT-functies van SQL Server