EDIT: Example below
As noted in @Oded, the best option is a table with parameters.
However, if for some reason you cannot use these (possibly the limitations of your shell), you can use the following to perform table partitioning:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[SplitToTable]
(
@List varchar(max), @Delim varchar(1)
)
RETURNS TABLE
AS
RETURN
(
WITH csvtbl(Start, [Stop]) AS (
SELECT Start = convert(bigint, 1), [Stop] =
charindex(@Delim COLLATE Slovenian_BIN2, @list + @Delim)
UNION ALL
SELECT Start = [Stop] + 1, [Stop] = charindex(@Delim
COLLATE Slovenian_BIN2, @list + @Delim, [Stop] + 1)
FROM csvtbl
WHERE ([Stop] > 0)
)
SELECT substring(@list, Start, CASE WHEN [Stop] > 0 THEN [Stop] -
Start ELSE 0 END) AS Value
FROM csvtbl
WHERE ([Stop] > 0)
)
100. , , :
OPTION (MAXRECURSION 1000) -- or 0 for unlimited
SELECT *
FROM MyTable as t
WHERE t.ID IN (
SELECT *
FROM dbo.SplitToTable('1,2,12,34,101', ',')
)
..