Цикл SQL и запрос exec - необходимо объявить скалярную переменную - PullRequest
0 голосов
/ 28 мая 2018

У меня есть таблица со столбцами: [1959], [1960], [1961] ... [2016]

И я написал запрос:

DECLARE @cnt INT = 1959;

WHILE @cnt < 2017
BEGIN
    DECLARE @sql NVARCHAR(1000)

    SET @sql = 'SELECT @cnt as ''Year'', DC.[Code], PT.[Country Name], PT.[@colname] as ''totalGDP'', PG.[@colname] as ''growthGDP''
        FROM [dbo].[GDP] PT
        INNER JOIN [dbo].[GDPgrowth] PG ON PT.[Country Name]=PG.[Country Name]
        INNER JOIN [dbo].[Dictionary] DC ON PT.[Country Name]=DC.[Country]'

    SET @sql = REPLACE(@sql, '@colname', CAST(@cnt AS VARCHAR(255)));

    EXEC(@sql);

    SET @cnt = @cnt + 1;
END;    

, но что-тонеправильно, я получаю сообщение об ошибке:

Сообщение 137, Уровень 15, Состояние 2, Строка 7
Необходимо объявить скалярную переменную "@cnt"

Чтоне так и как я могу это исправить?

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете передать его как параметр.Вместо exec() используйте:

exec sp_executesql @sql, N'@cnt int', @cnt=@cnt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...