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

Откуда: Латвия, Рига
Сообщений: 40
Всем пламенный привет ))

Вопрос - у меня в хранимой процедуре создается несколько таблиц-переменных (DECLARE @tb TABLE () ) достаточно большого объема.
Естьли возможность после использования данной таблицы-переменной както ее раздекларировать ??

Заранее спасибо
14 апр 04, 13:56    [628331]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Нет.
А для чего ? Она ведь локальная, т.е. видна только в текущем бэтче
14 апр 04, 13:58    [628342]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
rst
Member

Откуда: Йобурк
Сообщений: 1005
delete from @tb только..
14 апр 04, 13:58    [628343]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Дмитрий Голубев
Member

Откуда: Латвия, Рига
Сообщений: 40
А для чего ? Она ведь локальная, т.е. видна только в текущем бэтче

Glory, представь себе 10 таблиц-переменок и который по 200000 записей, которые визят в памяти на протяжении выполнении всего бетча который длится порядка 10-20 минут.
Думаю не имеет особого смысла держать в памяти то что не нужно.


Rst, спасибо конечно, но чтобы придумать данное не обязательно обращаться на sql.ru.
14 апр 04, 14:01    [628356]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Glory
Member

Откуда:
Сообщений: 104760
который по 200000 записей, которые визят в памяти на протяжении выполнении всего бетча который длится порядка 10-20 минут.
Такого объема таблицы переменные не будут "висеть" в памяти.
Но если вас это беспокоит то нужно использовать временные таблицы.
14 апр 04, 14:05    [628370]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
Думаю не имеет особого смысла держать в памяти то что не нужно.

Переменная-то в памяти останется до конца, но не думаю, что много её займет. А записи можно и грохнуть.
14 апр 04, 14:06    [628376]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
alex_ll
Member

Откуда: tomsk
Сообщений: 4465
А DELETE все записи не поможет?
14 апр 04, 14:06    [628378]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Дмитрий Голубев
Member

Откуда: Латвия, Рига
Сообщений: 40
То Глори: я уже думал насчет темповых таблиц - но помоему таблицы -переменные работают быстрее, хотя темп таблицы помоему тоже сидят в памяти.

Да delete from поможет, но удаление из таблицы занимает время, я ищу способ более быстрого уничтожения таблицы-переменой.
типа SET @tb = NULL )))
14 апр 04, 14:10    [628395]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
но помоему таблицы -переменные работают быстрее, хотя темп таблицы помоему тоже сидят в памяти.

Та все они в памяти сидят, если её хватает. Если нет - на диск сваливаются...
А вот "быстро" очистить можно так
create table #a (i int)


insert #a select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7

select * from #a

truncate table #a


select * from #a
14 апр 04, 14:14    [628413]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Glory
Member

Откуда:
Сообщений: 104760
То Глори: я уже думал насчет темповых таблиц - но помоему таблицы -переменные работают быстрее, хотя темп таблицы помоему тоже сидят в памяти.

It depends как говорят англичане.
А удаление устаревших страниц данных из кэша вообще не зависит от того, объекту какого типа эти страницы принадлежат. Здесь прежде всего важную роль играет время последнего обращения к странице.
14 апр 04, 14:15    [628415]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
хотя темп таблицы помоему тоже сидят в памяти.

До тех пор, пока в ней помещаются(условно), посде чего все - в tempdb -> удалить быстрее, чем произойдет удаление из tempdb не выйдет.
14 апр 04, 14:15    [628417]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
>Такого объема таблицы переменные не будут "висеть" в памяти.
Но если вас это беспокоит то нужно использовать временные таблицы.<
ой!
declare @t table
select * from tempdb.sysobjects

есть ли разница?
14 апр 04, 14:15    [628418]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Glory
Member

Откуда:
Сообщений: 104760
есть ли разница?
Есть. DROP TABLE @table не работает
14 апр 04, 14:16    [628422]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Дмитрий Голубев
Member

Откуда: Латвия, Рига
Сообщений: 40
Оки

Всем большое спасибо Ж)
14 апр 04, 14:18    [628433]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
есть ли разница?

Да и как BOL гласит: Use table variables instead of temporary tables, whenever possible. table variables provide the following benefits:

A table variable behaves like a local variable. It has a well-defined scope, which is the function, stored procedure, or batch in which it is declared.
Within its scope, a table variable may be used like a regular table. It may be applied anywhere a table or table expression is used in SELECT, INSERT, UPDATE, and DELETE statements. However, table may not be used in the following statements:

INSERT INTO table_variable EXEC stored_procedure

SELECT select_list INTO table_variable statements.

table variables are cleaned up automatically at the end of the function, stored procedure, or batch in which they are defined.

CHECK constraints, DEFAULT values and computed columns in the table type declaration cannot call user-defined functions.


table variables used in stored procedures result in fewer recompilations of the stored procedures than when temporary tables are used.


Transactions involving table variables last only for the duration of an update on the table variable. Thus, table variables require less locking and logging resources.
14 апр 04, 14:20    [628440]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
А еще если Вы создадите табличную переменную и потом посмотрите в tempdb то (сюрпир-сюрприз !) обнаружите там временную табличку с именем и данными Вашей переменной - так что для меня вся разница в том что их не надо чистить ручками после завершения батча, а вся причина их появления - необходимость поддерживать таблицы в функциях.
14 апр 04, 14:28    [628474]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Временные таблицы тоже не надо чистить - читаем рекомендации по их использованию!
14 апр 04, 14:55    [628562]     Ответить | Цитировать Сообщить модератору
 Re: Удаление таблицы переменной (@table)  [new]
YellowMan
Member

Откуда: острова
Сообщений: 1047
угумпс :(

Что то с памятью моей стало...это все от привычки сначала все отлаживать а потом засовывать в процедуру.
14 апр 04, 18:15    [629226]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить