2015-12-08 2 views
1

У меня есть таблица #months нижеДинамического запрос ошибка переменной

MONTH_ID FISCAL_YEAR_MONTH MIN_DATE MAX_DATE 
1    FSA201510  20151001 20151031 
2    FSA201511  20151101 20151130 
3    FSA201512  20151201 20151204 

Я использую ниже динамический запрос, чтобы обновить столбец SCCount в таблице mastercount (имеет 3 строки) -

DECLARE @sql VARCHAR(8000), @fym varchar(6) 

DECLARE @I INT, @ROWS INT 

SET @ROWS=(SELECT count(*) from #MONTHS)  
SET @I=1  

WHILE @I<[email protected]   
BEGIN 
    SET @fym=(SELECT RIGHT(FISCAL_YEAR_MONTH,6) from #MONTHS where [email protected]) 

    SET @sql = 'UPDATE mastercount' 
    SET @sql += ' SET SCCount = (SELECT count(*) from ' 
    SET @sql += ' dw_extract.dbo.dw_fsa_' + cast(@fym as varchar(6))+ ') WHERE [email protected]' 

    EXEC (@sql) 

    SET @[email protected]+1 
END 

Это дает Must declare the scalar variable "@I". Почему это происходит?

ответ

0

Вы должны изменить этот

SET @sql += ' dw_extract.dbo.dw_fsa_' + cast(@fym as varchar(6))+ ') WHERE [email protected]' 

к этому

SET @sql += ' dw_extract.dbo.dw_fsa_' + cast(@fym as varchar(6))+ ') WHERE row=' + CAST(@I AS NVARCHAR(10)) 
+0

Умный ответ. Работал! – Karver01

0

Это потому, что @I не распознается вашим динамическим запросом. Вы должны параметрироваться @I вместо этого и использовать sp_executesql для запуска запроса:

DECLARE @sql NVARCHAR(8000), @fym VARCHAR(6) 

DECLARE @I INT, @ROWS INT 

SET @ROWS = (SELECT COUNT(*) FROM #MONTHS)  
SET @I = 1  

WHILE @I <= @ROWS   
BEGIN 
    SET @fym = (SELECT RIGHT(FISCAL_YEAR_MONTH,6) FROM #MONTHS WHERE month_id = @I) 

    SET @sql = N'UPDATE mastercount' 
    SET @sql += N' SET SCCount = (SELECT count(*) from ' 
    SET @sql += N' dw_extract.dbo.dw_fsa_' + cast(@fym as varchar(6))+ N') WHERE [email protected]' 

    EXEC sp_executesql @sql, N'@I INT', @I 

    SET @I = @I + 1 
END 
+1

Отличное решение. Но вам все еще нужно иметь инструкцию EXEC (@sql)? – BICube

+0

@Ala, oh извините. Я забыл отредактировать эту часть! спасибо –

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