2015-03-19 13 views
0

我正在使用此存儲過程,但它導致錯誤。執行時出錯並在存儲過程中打印SQL查詢

查詢是

declare @min int 
declare @mnt int 
declare @query varchar(MAx) 
declare @finmnth int 
declare @divid int 
declare @finyear nvarchar(max) 

set @divid = 0 
set @finmnth = 6 
set @finyear = '2014-15' 

begin 

    if @finmnth = 3 or @finmnth = 2 or @finmnth = 1 
     set @min = 13 
    else 
     set @min = @finmnth 

    Set @query = 'select 
        /* Cummulative Progress */ 
         isNull(CONVERT(DECIMAL(10, 3), SUM(case when month between 4 and '+cast(@finmnth AS varchar)+' and mpryear='+cast(@finyear as nvarchar)+' then (IDA+Govt+Benyfe)/100000 else 0 end),2),0) as CUTMTot 
       from 
        MPR 
       where 
        (division = '+cast(@Divid as varchar)+' OR '+cast(@Divid as varchar)+' = 0)' 
end 

exec(@query) 

錯誤是

消息245,級別16,狀態1,第1行
轉換nvarchar的值 '2013-14' 爲數據類型int時 轉換失敗。

回答

0

試試這個。您錯過了@finyear變量附加的引號。在這種情況下打印您的陳述是一個好主意:PRINT @query。你會看到你的陳述是怎樣的。

DECLARE @min INT 
DECLARE @mnt INT 
DECLARE @query VARCHAR(MAX) 
DECLARE @finmnth INT 
DECLARE @divid INT 
DECLARE @finyear NVARCHAR(MAX) 

SET @divid = 0 
SET @finmnth = 6 
SET @finyear = '2014-15' 

BEGIN 

    IF @finmnth = 3 
     OR @finmnth = 2 
     OR @finmnth = 1 
     SET @min = 13 
    ELSE 
     SET @min = @finmnth 

    SET @query = 'select 
        /* Cummulative Progress */ 
         isNull(CONVERT(DECIMAL(10, 3), SUM(case when month between 4 and ' 
     + CAST(@finmnth AS VARCHAR) + ' and mpryear='''/*here*/ 
     + CAST(@finyear AS NVARCHAR) 
     + /*and here*/''' then (IDA+Govt+Benyfe)/100000 else 0 end),2),0) as CUTMTot 
       from 
        MPR 
       where 
        (division = ' + CAST(@Divid AS VARCHAR) + ' OR ' 
     + CAST(@Divid AS VARCHAR) + ' = 0)' 
END 

EXEC(@query) 
+0

感謝Giorgi其工作正常。非常感謝 – 2015-03-20 07:23:06