2011-11-07 49 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