Лучший способ сделать это - преобразовать входные параметры в таблицу, а затем использовать оператор in для этой таблицы.
Вы можете сделать это с помощью CTE, например
WITH CTE ( pos, pos_begin, pos_end ) AS
(
SELECT 0, 1, CHARINDEX( ',', @p + ',' )
UNION ALL
SELECT pos + 1, pos_end + 1, CHARINDEX( ',', @p + ',', pos_end + 1 )
FROM CTE
WHERE CHARINDEX( ',', @p + ',', pos_end + 1 ) > 0
), numList as
(
SELECT SUBSTRING( @p, pos_begin , pos_end - pos_begin ) AS "value"
FROM CTE
)
SELECT -- whatever you want
WHERE (o.OrderStatusID IN (SELECT CAST(value AS int) FROM numList)) OR @p is NULL
Есть и другие способы сделать это, прочитайте о многих других методах здесь - откуда это было адаптировано.http://www.projectdmx.com/tsql/sqlarrays.aspx#Cte
(Примечание: поскольку я быстро адаптировал это со страницы примера, я не оптимизировал его, ясно, что CTE можно сделать проще и, следовательно, быстрее.)