как передать несколько значений Dynami c из одного столбца, используя процедуру sql - PullRequest
0 голосов
/ 25 января 2020

Моя пример таблицы:

item   | id
-------+-----
mobile | 1
car    | 2
pen    | 3

Я пытаюсь создать процедуру, которая передает значение нескольких динамических c из одного столбца (item), например: mobile, car et c.

Код:

create procedure g_items
    @im varchar(25)
as
    select * 
    from item 
    where item in (@im)
go

exec g_items @im ='pen','mobile'

Ошибка:

Должен передать параметр номер 2 и последующие параметры как «@name = значение». После использования формы '@name = value' все последующие параметры должны быть переданы в форме '@name = value'.

1 Ответ

0 голосов
/ 25 января 2020

Две вещи -

  1. Когда вы пишете ' exe c g_items @im =' pen ',' mobile '', вы пытаетесь передать два параметра к хранимой процедуре, где второй параметр не имеет вид пары @name = @value (как и первый @im = 'pen'), следовательно, ошибка.

  2. Я понимаю, что вы хотите передать несколько значений (список значений) хранимой процедуре в одном параметре, чтобы можно было запросить таблицу с предложением 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'
...