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

Итак, все мы пишем хранимые процедуры, очень часто создаем в них временные таблицы.

Надо ли в конце хранимых процедур писать явные команды на удаление созданных временных таблиц?
Что и почему лучше - явно удалять временные таблицы в конце хранимок или доверить эту процедуру sql server-у, после того, как выполнение хранимки закончится?

Сам я явно временные таблицы не удаляю. Но если вижу чужой код, где есть удаление - он мне глаза не режет.

Просто сейчас получилась вообще смешная ситуация. Один заказчик кричит - обязательно удаляйте, другой - не удаляйте.
А вот как-то официальных рекомендаций фирмы Microsoft пока найти не удалось.

Может подскажет кто-нибудь где и что почитать.

Заранее благодарен.
27 ноя 11, 20:03    [11667593]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
ART-C0DE
Guest
https://www.sql.ru/forum/actualthread.aspx?tid=547650
27 ноя 11, 20:12    [11667614]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
iap
Member

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

нет, не надо.
27 ноя 11, 20:13    [11667619]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Павел-П
Guest
iap,

Нет, ну я Вам конечно всем верю. Но вот какую-нибудь официальную ссылочку хотелось бы.
27 ноя 11, 20:27    [11667656]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Иногда стоит явно удалять временные таблицы, ибо у сиквела есть одна багафича: http://t-sql.ru/post/temp_table.aspx
27 ноя 11, 20:27    [11667658]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Павел-П
Guest
Knyazev Alexey,

Спасибо большое за ссылку. Очень даже понравилось.
А я вот нашел еще одну ссылку, где написано что drop table может привести к проблемам.
http://www.sqlservercentral.com/Forums/Topic1024413-1550-1.aspx#bm1025171

Похоже тема перестает быть томной и становится все интересней.
27 ноя 11, 20:45    [11667731]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Павел-П
Guest
А вот и еще одна противоречивая статья, где просто решили сравнить производительность хранимок, написанных так и так.
http://sqlserverpedia.com/blog/sql-server-2008/explicitly-dropping-temporary-tables-and-performance-%E2%80%93-myth-or-fact/

Но у людей получились разные результаты.
27 ноя 11, 20:48    [11667745]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Павел-П
Guest
Хотелось бы услышать побольше мнений от народа.
У вас в Best practices записано:
1. Удалять созданные временные таблицы
2. Не удалять

ну и почему... :-)
28 ноя 11, 11:29    [11669420]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
Павел-П
Хотелось бы услышать побольше мнений от народа
временных таблиц избегаю всячески
где только можно стараюсь использовать вместо них табличные переменные
28 ноя 11, 11:33    [11669448]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
Паганель
стараюсь использовать вместо них табличные переменные

с их участием сервер часто строит очень странные планы
28 ноя 11, 11:57    [11669614]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Паганель
Павел-П
Хотелось бы услышать побольше мнений от народа
временных таблиц избегаю всячески
где только можно стараюсь использовать вместо них табличные переменные
Я - наоборот.
Табличные переменные придуманы для функций. IMHO
28 ноя 11, 12:00    [11669643]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap
Паганель
пропущено...
временных таблиц избегаю всячески
где только можно стараюсь использовать вместо них табличные переменные
Я - наоборот.
Табличные переменные придуманы для функций. IMHO

+1
Что-то я табличные переменные правильно готовить не умею и они у меня периодически протормаживать начинают в самое неподходящее время(((.


По сути же вопроса - не замарачиваюсь со случаями удаления/не удаления... Если дроп остался с отладки - ну и хрен с ним, пусть будет. Если же его не было - специально редактировать процедуру не буду. Часто проверка на наличие таблицы вообще идет в начале процедуры (как раз из-за того, что отлаживать проще), так оно и живет потом.
28 ноя 11, 12:15    [11669793]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Павел-П
Guest
kDnZP,

ну то что вы на чем-то не заморачиваетесь еще ни о чем не говорит .
В частности описанный вами случай, когда Drop временной таблицы идет в начале процедуры может приводить к очень плохим последствиям в виде рекомпиляции (см.ниже).

Ну а вообщем рекомендация фирмы Microsoft удаление временных таблиц в конце процедур не делать, как я понял.

http://support.microsoft.com/kb/243586

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

Чтобы избежать этого, измените хранимую процедуру так, чтобы она соответствовала следующим требованиям.
Все операторы, содержащие имя любой временной таблицы, предшествуют любому оператору DROP TABLE, ссылающемуся на временную таблицу.

Операторы DROP TABLE не нужны временным таблицам, созданным в хранимой процедуре. Таблицы автоматически удаляются по завершении процедуры.
3 дек 11, 00:18    [11700030]     Ответить | Цитировать Сообщить модератору
 Re: Удаление временных таблиц в конце хранимых процедур.  [new]
Павел-П
Guest
Паганель,

У вас в Best practises так и написано - временных таблиц избегать всячески? Может быть все-таки лучше разобраться как их эффективно использовать? Статей вроде бы хватает.
3 дек 11, 00:20    [11700034]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить