Выберите * в #Temp не работает в динамике c SQL - PullRequest
0 голосов
/ 19 июня 2020

Когда я создаю временную таблицу и вставляю данные в эту временную таблицу через c SQL, все работает нормально. Но когда я использую select * into #TempTable1 from YourTable в динамике c SQL, возникает ошибка. Я не могу понять причину этой ошибки.

Таблица:

create table YourTable(Id int identity(1,1),Col1 varchar(100));

insert into YourTable(Col1)
values('Stack'),('Over'),('Flow')

Рабочий код: -

Declare @SqlStr varchar(max)

create table #TempTable(Id int identity(1,1),Col1 varchar(100))
set @SqlStr='Insert into #TempTable(Col1) select Col1 from YourTable'
exec(@SqlStr)
select * from  #TempTable     

Не работает Код:

Declare @SqlStr varchar(max)
set @SqlStr='select * into  #TempTable1 from YourTable'
exec(@SqlStr)
select * from  #TempTable1

Ошибка:

Сообщение 208 Уровень 16 Состояние 0 Строка 4 Неверное имя объекта '# TempTable1'.

Для справочных данных здесь .

1 Ответ

0 голосов
/ 19 июня 2020

Причина этой ошибки в том, что временная таблица привязана к сеансу, и ваш динамический c SQL работает в отдельном сеансе.

Используйте глобальную временную таблицу (префикс: ##) и выполните эта уникальна по названию (то есть добавить к имени guid). Таким образом, динамический c SQL сможет это увидеть.

Временные таблицы различных типов: http://www.sqlines.com/articles/sql-server/local_and_global_temporary_tables

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...