Sql Server:选择..Into #TempTable,在Temp Table名称上赋值变量

时间:2011-11-07 16:24:27

标签: sql sql-server-2008 tsql variables temp-tables

我在这里有一个问题。我最好先粘贴我的代码

SET @Sql = 'DECLARE @Date_From VARCHAR(10);
            DECLARE @Date_To VARCHAR(10);
            DECLARE @TempTable VARCHAR(500);
            SET @TempTable = #'+@TblName+'; 
            SET @Date_From = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-@DayPrior,120)+''';
            SET @Date_To = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-@DayPrior,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 周围的选择声明内是否存在约束?

我尝试了@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很新,请不要犹豫,指出我的错误。我们都是从错误中学习。很抱歉我的英语水平很差。

问候:

LiangCK

1 个答案:

答案 0 :(得分:4)

您有几个问题:

  • 您无法像这样分配表名。您需要将变量分配给表示表名的字符串:SET @TempTable = ''#'+@TblName+''';额外的引号将使表成为字符串

  • 您还需要进行第二次查询动态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'