Exec команда SQL Server работает неправильно

У меня есть хранимая процедура spResultFlagUpd который получает 2 параметра @p_Code_Sazman а также @p_Code_Marhale, Эта хранимая процедура должна обновить столбец значениями ИСТИНА и ЛОЖЬ

ALTER PROCEDURE [dbo].[spResultFlagUpd] 
    @p_Code_Sazman  Nchar(6) = Null,
    @p_Code_Marhale Nchar(6)=Null
AS
    IF EXISTS(SELECT * FROM tblResult 
              WHERE Code_Marhale = @p_Code_Marhale  
                AND Code_Sazman = @p_Code_Sazman 
                AND Confirmed = 1 AND SendFile = 1 AND MakeFileFlag = 1)
    BEGIN
        UPDATE tblResult 
        SET MakeFileFlag = 0
        WHERE Code_Marhale = @p_Code_Marhale  
          AND Code_Sazman = @p_Code_Sazman
    END

Когда я бегу

exec spResultFlagUpd @p_Code_Marhale='000060', @p_Code_Sazman='000021'

это не обновляет таблицу.

Но когда я запускаю код обновления как SQL-запрос, он работает правильно.

Когда я пишу код чисто как

   update tblResult 
    set MakeFileFlag=0
    where Code_Marhale=@p_Code_Marhale  and Code_Sazman=@p_Code_Sazman

работает правильно

1 ответ

Существующее заявление работает. Проблема в обновлении. Ваш код компилируется перед запуском if. Итак, ошибка возникает на этапе компиляции.

Вы можете исправить это с помощью динамического SQL:

 IF EXISTS (select * from tblResult where Code_Marhale=@p_Code_Marhale  and Code_Sazman=@p_Code_Sazman and Confirmed=1 and SendFile=1 and MakeFileFlag=1)
begin
  exec sp_execute_sql N'update tblResult set MakeFileFlag=0 where Code_Marhale=@p_Code_Marhale  and Code_Sazman=@p_Code_Sazman';
End;

попробуйте этот код с вашими собственными изменениями

Другие вопросы по тегам