Я использовал следующую функцию табличной переменной, чтобы разбить список на таблицу, которая может быть JOIN'd в IN'd.
ALTER FUNCTION [dbo].[Split] ( @List nvarchar(4000), @SplitOn nvarchar(5) ) RETURNS @RtnValue table (
Id int identity(1,1), Value nvarchar(100) ) AS BEGIN WHILE (Charindex(@SplitOn,@List)>0) BEGIN Insert Into @RtnValue (value) Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) END Insert Into @RtnValue (Value) Select Value = ltrim(rtrim(@List))
Return END