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;
попробуйте этот код с вашими собственными изменениями