Sql Server: выберите..Into #TempTable с назначением переменной для имени временной таблицы - PullRequest
1 голос
/ 07 ноября 2011

У меня есть вопрос. Мне лучше сначала вставить свой код

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

Я пытаюсь распечатать @Sql, используя PRINT и я получаю этот результат

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 Ответ

4 голосов
/ 07 ноября 2011

У вас есть пара вопросов:

  • Вы не можете назначить имя таблицы таким образом. Вам необходимо присвоить переменную строке, представляющей имя таблицы: SET @TempTable = ''#'+@TblName+'''; Дополнительные кавычки сделают таблицу строкой

  • Вам необходимо также выполнить второй запрос Dynamic 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'
...