我有一张名为@TempGeog
Declare @TempGeog table (type VARCHAR(MAX))
DECLARE @statement1 NVARCHAR(MAX)
SET @statement1 = 'insert into #CountyTemp select th.STRLOGRECNO,tt.county from [DC_2010_'+@geographyType+'] th
inner join'+ @TempGeog +' tt on th.NAMELSAD10 = tt.county ;'
EXEC (@statement1);
我无法在statement1中使用表@TempGeog
。
错误:必须声明标量变量“@TempGeog”
我的sql查询应该根据用户选择的地理类型动态构建。
答案 0 :(得分:0)
如果你想以这种方式传递表名,我不推荐。 @TempGeog
需要声明为varchar
数据类型而不是table
类型。
工作的:
DECLARE @table VARCHAR(20) = 'MyTable'
DECLARE @set VARCHAR(100) = 'Select * from ' + @table
PRINT @set
失败:
DECLARE @table2 TABLE (id int)
DECLARE @set2 VARCHAR(100) = 'Select * from ' + @table2
PRINT @set2
根据您的修改,您需要将代码更改为此
SET @statement1 = '
Declare @TempGeog table (type VARCHAR(MAX))
insert into #CountyTemp select th.STRLOGRECNO,tt.county from [DC_2010_' + @geographyType + '] th
inner join @TempGeog tt on th.NAMELSAD10 = tt.county ;'
EXEC (@statement1);