我有列表:[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;
有什么问题,我该如何解决?
答案 0 :(得分:0)
您可以将其作为参数传递。而不是exec sp_executesql @sql, N'@cnt int', @cnt=@cnt
,请使用:
{{1}}