Две вещи -
Когда вы пишете ' exe c g_items @im =' pen ',' mobile '', вы пытаетесь передать два параметра к хранимой процедуре, где второй параметр не имеет вид пары @name = @value (как и первый @im = 'pen'), следовательно, ошибка.
Я понимаю, что вы хотите передать несколько значений (список значений) хранимой процедуре в одном параметре, чтобы можно было запросить таблицу с предложением in, содержащим все значения из списка, переданного хранимой процедуре. Для этого я бы предложил вам изменить хранимую процедуру, как показано ниже -
create procedure g_items @im varchar(25)
as
declare @sql nvarchar(max)
set @sql = replace(@im,',',''',''')
set @sql = 'select * from item where item in ('''+@sql+''')'
exec sp_executesql @sql
go
Приведенный выше код будет выполнять динамически сгенерированный запрос SQL. Сначала мы должны заключить все запятые в одинарные кавычки, это то, что делает оператор replace, затем мы должны заключить весь список в круглые скобки вместе с действительным оператором SQL, а затем мы наконец выполняем эту динамику c SQL заявление, чтобы получить желаемый результат. Для выполнения процедуры используйте код ниже
exec g_items @im ='pen,mobile'