2016-08-24 29 views
1

我有一個存儲過程spResultFlagUpd,它獲取2個參數@p_Code_Sazman@p_Code_Marhale。當我運行SQL Server執行命令工作不正確

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

它不更新表此存儲過程必須更新true和false值

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 

列。

但是,當我作爲SQL查詢運行更新代碼時,它可以正常工作。

當我寫這樣

update tblResult 
    set MakeFileFlag=0 
    where [email protected]_Code_Marhale and [email protected]_Code_Sazman 

的純代碼是否能夠正常工作

+0

檢查該查詢是否返回任何結果'SELECT * FROM tblResult WHERE Code_Marhale = '000060' AND Code_Sazman ='000021'AND Confirmed = 1 AND SendFile = 1 AND MakeFileFlag = 1' –

+0

是的,它返回1個唯一記錄 – Mina

+0

即使我右鍵單擊sp並從該窗口使用值執行sp,它也能正確運行@Prdp – Mina

回答

-1

的存在語句工作。問題是更新。正在運行if之前正在編譯您的代碼。所以,錯誤發生在編譯階段。

您可以通過使用動態SQL解決這個問題:

IF EXISTS (select * from tblResult where [email protected]_Code_Marhale and [email protected]_Code_Sazman and Confirmed=1 and SendFile=1 and MakeFileFlag=1) 
begin 
    exec sp_execute_sql N'update tblResult set MakeFileFlag=0 where [email protected]_Code_Marhale and [email protected]_Code_Sazman'; 
End; 

試試這個代碼用自己的修改

+1

我試過了,沒有IF EXISTS語句,但它沒有更新 – Mina

+1

,並且沒有錯誤嗎? – Ralis

+0

是的,沒有錯誤 – Mina