Долгим способом было бы создать упаковщик, который делает это - функцию, которая берет список состояний и добавляет их в окончательную таблицу, которая будет возвращена.
Вы также можете использовать любую технологию, вызывающую эту процедуру, для объединения записей (т. Е. Добавление .NET к результирующему набору каждого состояния, к которому вы обращаетесь)
Если вы можете передать список состояний в ваш параметр 'state', вы можете создать динамический SQL-запрос
CREATE PROCEDURE [dbo].[MyStored]
@state nvarchar(150)
AS
-- @state needs to be pre-formatted in a list for an in-clause
-- i.e. 1,2,10 (if it was a string list, you'd need to do use double single quotes around the items - ''1'',''2'',''10''
DECLARE @SQL nVarChar(5000) = '
SELECT blahblahblah
FROM LotsOfJoins
WHERE StoredState in (' + @state + ')'
exec sp_executeSql @sql
Это прекрасно работает для простых процедур; хотя, если в будущем понадобятся изменения, обслуживание может занять больше времени.
.
Вот статья CodeProject и статья MS SQL Tips , которая лучше разбирается в деталях
.
РЕДАКТИРОВАТЬ: параметр @state должен быть nVarChar, так как вы передаете в список значений int с разделителями-запятыми