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

Откуда:
Сообщений: 625
  set @sql_1 = '  
  select top 10 Field1
    into #_Tmp123123123 
 from t1       
    --select * from #_Tmp123123123  -- здесь работает
  ';          
  exec sp_sqlexec @sql_1
  
select * from #_Tmp123123123 -- не работает

Если обратиться к темповой таблице внутри динамического запроса - то работает, а если извне то не работает
Как сделать, чтобы работал селект не из динамического скрипта
25 май 15, 11:41    [17684593]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
Glory
Member

Откуда:
Сообщений: 104760
abort
Как сделать, чтобы работал селект не из динамического скрипта

Никак. Диначическая таблица автоматически удаляется в конце создавшего ее пакета
25 май 15, 11:43    [17684605]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
abort, создавайте временную таблицу извне, а обращайтесь к ней в динамическом запросе.
25 май 15, 12:01    [17684709]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
lamer yuga
Guest
abort
Как сделать, чтобы работал селект не из динамического скрипта
Создавать таблицу перед DSQL, а внутри DSQL только заполнять ее
25 май 15, 12:01    [17684712]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Minamoto, lamer yuga,
а ничего, что это противоречит названию темы?
25 май 15, 12:04    [17684736]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Если нужно обязательно создать таблицу в динамическом SQL, то создавайте глобальную временную таблицу с ## которая.

А вообще-то, идея Minamoto более жизнеспособная. ИМХО.
25 май 15, 12:19    [17684828]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
AlanDenton
создавайте глобальную временную таблицу с ## которая
Тогда надо различать записи, относящиеся к разным сессиям, и проверять наличие таблицы перед созданием.
25 май 15, 12:22    [17684846]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
abort
Member

Откуда:
Сообщений: 625
Понятно, остается создавать темп таблицу до динамики.
25 май 15, 12:22    [17684850]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
abort
Member

Откуда:
Сообщений: 625
глобал темп не подойдет. Ибо в одном запросе создается около 25 темповых таблиц. А если использовать не темповую, а обычную, а потом ее удалять каждый раз перед выходом. Это рационально?
25 май 15, 12:28    [17684876]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31439
abort
А если использовать не темповую, а обычную, а потом ее удалять каждый раз перед выходом. Это рационально?
В чём разница между глобальной временной?
25 май 15, 12:31    [17684891]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
abort
Member

Откуда:
Сообщений: 625
временные глобальные и локальные живут в в бд tempdb, а обычные в других. tempdb ограничен в объемах у нас до 30 гб. Остается хранить в рабочей бд. Насколько это правильно постоянно "разряжать" файлы базы данных
25 май 15, 12:47    [17684997]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
abort,
автор
Остается хранить в рабочей бд. Насколько это правильно постоянно "разряжать" файлы базы данных

на забывайте, что субд по отношению к tempdb ведет себя несколько не по правилам, учитывая временный характер данных.
25 май 15, 12:55    [17685029]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
abort
Member

Откуда:
Сообщений: 625
churupaha,

да я в курсе. при закрытии сессии временные локальные таблицы уничтожаются.
25 май 15, 12:58    [17685036]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
iap
Minamoto, lamer yuga,
а ничего, что это противоречит названию темы?

Ничего. Я понимаю, что автор мог некорректно сформулировать свой вопрос - сформулировать его так, что существует единственный, совершенно бесполезный для него ответ - "Никак".

Его, кстати, уже дал Glory, поэтому я предположил, каким будет следующий вопрос от автора, и дал ответ на него.
25 май 15, 13:33    [17685216]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
abort
churupaha,

да я в курсе. при закрытии сессии временные локальные таблицы уничтожаются.


Чем вас не устраивает такой подход ?

declare @tmp TABLE (code varchar(50), mount money);
DECLARE @q nvarchar(MAX) = N'SELECT ''A'' coa_code, 222 AS amount';

INSERT INTO  @tmp (code, mount)
EXEC  (@q)

SELECT * from @tmp
25 май 15, 14:15    [17685447]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Или так
declare @tmp TABLE (code varchar(50), mount money);
DECLARE @q nvarchar(MAX) = N'SELECT ''A'' coa_code, 222 AS amount INTO #T7897897

SELECT * FROM #T7897897';

INSERT INTO  @tmp (code, mount)
EXEC  (@q)

SELECT * from @tmp
25 май 15, 14:16    [17685448]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
abort
Member

Откуда:
Сообщений: 625
a_voronin,

ок спасибо
25 май 15, 14:24    [17685507]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
abort
churupaha,

да я в курсе. при закрытии сессии временные локальные таблицы уничтожаются.


Я не об этом. Почитайте internals по tempdb. Там много оптимизаций учитывающих "временность" данных (transaction log, checkpoit'ы и т. п..). Боянить лень. В гуглах все есть.
25 май 15, 15:55    [17686176]     Ответить | Цитировать Сообщить модератору
 Re: как обратиться к временной таблице, созданной в динамическом SQL  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
churupaha
abort,
автор
Остается хранить в рабочей бд. Насколько это правильно постоянно "разряжать" файлы базы данных

на забывайте, что субд по отношению к tempdb ведет себя несколько не по правилам, учитывая временный характер данных.
еще обратите внимание что у временных таблиц в связи с тем что она таки в другой базе может быть иной collation для текстовых полей
я создаю вот так Name varchar(250) COLLATE database_default,
и оно берет collation из текущей базы
25 май 15, 23:10    [17688461]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить