Могу ли я выполнить c хранимую процедуру внутри IIF в SQL? - PullRequest
0 голосов
/ 11 февраля 2020

Например:

select iif (100 < 200, exec dbo.myProc, 'no')

Я пытался сделать это на всякий случай и не смог - так как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Нет. Вы не можете делать то, что вы хотите. Вы можете возможно переписать хранимую процедуру как пользовательскую функцию. Тем не менее, существуют ограничения на UDF, такие как неспособность запустить Dynami c SQL, что может сделать это невозможным.

Если хранимая процедура возвращает постоянное значение или таблицу, то вы может хранить значение в промежуточной таблице:

declare @t table ( . . . );  -- appropriate definition
insert into @t
    exec(dbo.myproc);

Если хранимую процедуру нужно вызывать с аргументами, основанными на значении в каждой строке, то, увы, единственное решение - это перебирать внешний запрос (возможно, с использованием курсора) и запуск хранимой процедуры в каждой строке.

0 голосов
/ 11 февраля 2020

Сначала объявите переменную, а затем выполните c запрос.

declare @strquery varchar(max)=iif(100<200, 'dbo.myProc', 'select ''no''')
exec (@strquery)

ИЛИ

if(100<200) 
begin 
 exec dbo.myProc 
end 
else 
begin 
 select 'no' 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...