SQL存储过程使用SET语句

时间:2014-04-09 18:28:16

标签: mysql sql stored-procedures

我有一张名为@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查询应该根据用户选择的地理类型动态构建。

1 个答案:

答案 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);