Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не видно временную таблицу  [new]
dmitry_do
Member

Откуда: Новосибирск
Сообщений: 52
Добрый день!
Пытаюсь выгрузить данные во временную таблицу и затем выбрать их из нее оператором select

вариант 1:

select * into #t from BlackList
select * from #t

РАБОТАЕТ

Вариант 2:

declare @cmd nvarchar(500);
set @cmd = 'select * into #t1 from BlackList'
exec sp_executesql @cmd;
select * from #t1

НЕ РАБОТАЕТ!
Выдается сообщение:

(строк обработано: 2)
Сообщение 208, уровень 16, состояние 0, строка 4
Недопустимое имя объекта "#t1".

После команды exec временная таблица видимо теряется.
Подскажите, в чем проблема?
6 окт 11, 08:51    [11392422]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
dmitry_do
Подскажите, в чем проблема?
После выполнения динамического SQL все переменные и временные таблицы уничтожаются.
6 окт 11, 08:57    [11392441]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
dmitry_do,

область видимости локальной временной таблицы,
если она создаётся в динамическом SQL,
ограничена этим DSQL.
6 окт 11, 08:59    [11392449]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
из-за области видимости
как вариант, используйте глобальные временные таблицы
declare @cmd nvarchar(500);
set @cmd = 'select * into ##t1 from sys.databases'
exec sp_executesql @cmd;
select * from ##t1
drop table ##t1
6 окт 11, 09:00    [11392454]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
dmitry_do
Member

Откуда: Новосибирск
Сообщений: 52
alexeyvg
dmitry_do
Подскажите, в чем проблема?
После выполнения динамического SQL все переменные и временные таблицы уничтожаются.


Понял, спасибо. Хотя очень жаль.
6 окт 11, 09:02    [11392458]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
dmitry_do, можно определить временную таблицу снаружи динамики, тогда отработает.
6 окт 11, 09:32    [11392588]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
dmitry_do
Понял, спасибо. Хотя очень жаль.

А зачем тут динамический запрос ?
6 окт 11, 10:13    [11392827]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
гость06102011
Guest
dmitry_do,

а если вместо

declare @cmd nvarchar(500);
set @cmd = 'select * into #t1 from BlackList'
exec sp_executesql @cmd;
select * from #t1

написать чтото вроде

select * into #t1 from BlackList where 1=0 --создание таблицы
 
declare @cmd nvarchar(500);
set @cmd = 'insert into #t1 select * from BlackList'
exec sp_executesql @cmd;
select * from #t1
6 окт 11, 13:32    [11394394]     Ответить | Цитировать Сообщить модератору
 Re: Не видно временную таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
гость06102011
написать чтото вроде
Нельзя, это же та самая "универсальная процедура", в которую таблицы передаются как параметры :-)
6 окт 11, 14:36    [11395018]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить