Můžete to předat jako seznam oddělený čárkami, pak použít funkci rozdělení a spojit se s výsledky.
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
);
Nyní vaše uložená procedura:
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
Potom to zavolejte:
EXEC dbo.doStuff @List = '1, 2, 3, ...';
Některá pozadí, další možnosti a srovnání výkonu můžete vidět zde:
- Rozdělte struny správným způsobem – nebo další nejlepší způsobem
- Splitting Strings:A Follow-Up
- Dělení řetězců:Nyní s menším množstvím T-SQL
- Porovnání metod dělení / zřetězení řetězců
- Zpracování seznamu celých čísel :můj přístup
- Rozdělení seznamu celých čísel:další shrnutí
- Další informace o rozdělování seznamů:vlastní oddělovače, předcházení duplicitám a udržování pořádku
- Odebírání Duplikáty z řetězců v SQL Server
Na SQL Server 2016 nebo novějším byste se však měli podívat na STRING_SPLIT()
a STRING_AGG()
:
- Překvapení a předpoklady výkonu:STRING_SPLIT()
- STRING_SPLIT() na serveru SQL 2016:Následná akce č. 1
- STRING_SPLIT() na serveru SQL 2016:Následná akce č. 2
- SQL Server v.Next :Výkon STRING_AGG()
- Vyřešte staré problémy pomocí nových funkcí STRING_AGG a STRING_SPLIT SQL Serveru