2014-04-09 53 views
0

存儲過程我有一個表稱爲@TempGeogSQL使用SET語句

Declare @TempGeog table (type VARCHAR(MAX)) 

DECLARE @statement1 NVARCHAR(MAX) 

SET @statement1 = 'insert into #CountyTemp select th.STRLOGRECNO,tt.county from [DC_2010_'[email protected]+'] th 
      inner join'+ @TempGeog +' tt on th.NAMELSAD10 = tt.county ;' 
EXEC (@statement1); 

我不能夠使用表@TempGeog我的語句1中。

Error:Must declare scalar variable "@TempGeog"

我的sql查詢應根據用戶選擇的地理類型動態構建。

+1

如果表被稱爲'@ TempGeog',不該'它只是'內部連接@TempGeog tt'? –

+0

@JoachimIsaksson'@ TempGeog'在我的聲明中不可用。因此,我不是abe執行內部聯接 – user2748161

回答

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); 
+0

仍在運行時拋出錯誤。 必須聲明表變量'@ TempGeog' – user2748161

+0

對不起,如果你想使用它,你必須在動態sql中聲明它。我更新了回答 –

+0

如果我們這樣聲明,它會從原始表中替換內容吧? – user2748161