CLR テーブル値関数をお勧めします。代わりに、この関数を整数を処理するように変換するのにそれほど時間はかかりません。
次に、次のように言うことができます。
SELECT t.Columns
FROM dbo.YourTable AS t
INNER JOIN dbo.CLRFunctionName(@IntegerList) AS f
ON t.ColumnName = f.Item;
XML の場合 (CLR を実装できない場合)、次のようにすることができます。
CREATE FUNCTION [dbo].[SplitInts]
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN ( SELECT 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
);
GO
そして、同じことを...
SELECT t.Columns
FROM dbo.YourTable AS t
INNER JOIN dbo.SplitInts(@IntegerList) AS f
ON t.ColumnName = f.Item;
どちらの場合も、一時テーブルやテーブル変数は必要ありません。