SQL循环和exec查询 - 必须声明标量变量

时间:2018-05-27 22:55:29

标签: sql sql-server database

我有列表:[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;    

但出了点问题,我收到了一个错误:

  

Msg 137,Level 15,State 2,Line 7
  必须声明标量变量&#34; @ cnt&#34;

有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

您可以将其作为参数传递。而不是exec sp_executesql @sql, N'@cnt int', @cnt=@cnt ,请使用:

{{1}}