2015-03-19 3 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) 

Ошибка

Msg 245, уровень 16, состояние 1, строка 1
Конверсия удалось при преобразовании значения NVARCHAR '2013-14' для типа данных междунар ,

ответ

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

Thanks Giorgi its Worked fine. большое спасибо –

Смежные вопросы