2011-11-07 59 views
1

我有一個問題,更好這兒過得貼上我的代碼第一SQL服務器:SELECT..INTO #TempTable對臨時表名變量賦值

SET @Sql = 'DECLARE @Date_From VARCHAR(10); 
      DECLARE @Date_To VARCHAR(10); 
      DECLARE @TempTable VARCHAR(500); 
      SET @TempTable = #'[email protected]+'; 
      SET @Date_From = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)[email protected],120)+'''; 
      SET @Date_To = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)[email protected],120)+'''; 
      '+ @Sql 

我嘗試使用PRINT 打印出@sql和我得到這樣的結果

DECLARE @Date_From VARCHAR(10); 
DECLARE @Date_To VARCHAR(10); 
DECLARE @TempTable VARCHAR(500); 
SET @TempTable = #RawData_New; 
SET @Date_From = '2011-04-05'; 
SET @Date_To = '2011-04-05'; 

Select Distinct Coloum1,Coloum2 into @TempTable 
from RawData_New with(nolock) 
here Convert(varchar(10), Date_Tm, 120) Between @Date_From And @Date_To 

我在執行此SQL後得到一個錯誤,我得到一個錯誤:

Incorrect syntax near '@TempTable'. 

是否有任何約束到此符號或內部選擇語句圍繞INTO

我試過不變量分配新建分配FY上@TempTable,我直接把@TempTable值在SQL中像

Select Coloum1,Coloum2 into #RawData_New 
from RawData_New with(nolock) 
here Convert(varchar(10), Date_Tm, 120) Between @Date_From And @Date_To 

其工作正常,我讓我的預期的結果?有沒有解決方案來解決這個問題?

謝謝你。

PS:我對T-Sql相當陌生,請不要猶豫,指出我的錯誤。我們都從Mistake.Any學習對不起我的可憐的英語水平。

問候:

LiangCK

回答

4

你有幾個問題:

  • 不能分配這樣一個表名。您需要將變量分配給表示表名的字符串:SET @TempTable = ''#'[email protected]+''';額外的引號將使該表成爲字符串

  • 您還需要進行第二個查詢動態SQL。與表名在運行時基本上解析它:

..

'Select Coloum1,Coloum2 into' + @TableName +' 
from SPC.dbo.Lube_RawData_New with(nolock) 
where Convert(varchar(10), Date_Tm, 120) Between @Date_From And @Date_To' 
+0

嗨@JNK。你好,我試過你的例子。是工作。但問題是,這個SQL實際上是從用戶預先設置的表中獲得的,這意味着他們從開始到結束輸入。來自select .... where的地方。我試圖在這方面實現更多的用戶友好。你會得到什麼我的意思是?還有另一種解決方法嗎? – Worgon

+0

@LiangCk - 我不明白爲什麼這是一個問題。你能否詳細說明你的問題? – JNK

+0

我編輯我的第一comment.See如果你可以幫我在那個==「 – Worgon