Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Переименовать временную таблицу  [new]
Примуса починяю
Guest
Здравствуйте. Есть задача оставить во временной таблице #t небольшое количество записей, отобранных по некоторому критерию. Хочу попробовать перебросить нужные записи во временную таблицу #d, после чего дропнуть #t и переименовать #d в #t. Чем это можно сделать, если обычно применяемая для переименований процедура sp_rename изменяет имя пользовательского объекта в текущей базе данных, а временные таблицы создаются в tempdb?
21 сен 15, 16:14    [18176301]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Примуса починяю
Чем это можно сделать, если обычно применяемая для переименований процедура sp_rename изменяет имя пользовательского объекта в текущей базе данных, а временные таблицы создаются в tempdb?

Ничем. Задача глупа изначально
21 сен 15, 16:16    [18176310]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
Glory,

почему?
21 сен 15, 16:20    [18176339]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Примуса починяю
Glory,

почему?

Создайте сразу таблицу нужного формата. А ен занимайтесь ерундой по перекладыванию данных из одной таблицы в другую
21 сен 15, 16:22    [18176356]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
komrad
Member

Откуда:
Сообщений: 5702
Примуса починяю
Хочу попробовать перебросить нужные записи во временную таблицу #d, после чего дропнуть #t и переименовать #d в #t. Чем это можно сделать


select * 
into #t 
from #d 
21 сен 15, 16:23    [18176365]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
Glory
Создайте сразу таблицу нужного формата.


Логика следующая.
1. Создается и заполняется данными временная таблица.
2. На каком-то этапе становится ясно, что большинство записей там лишние. Или не становится - заранее это не известно.
3. Если оказывается, что 99% записей лишние, таблица чистится, как вариант, перенесением полезной части в новую временную таблицу, и переименованием.
4. Временная таблица используется дальше.

komrad,

Фишка в том, чтобы новая таблица имела то же имя, что и старая. Поскольку этап очистки не обязательный.
21 сен 15, 16:31    [18176419]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Примуса починяю
3. Если оказывается, что 99% записей лишние, таблица чистится, как вариант, перенесением полезной части в новую временную таблицу, и переименованием.

Вам знакома команда DELETE ?
21 сен 15, 16:32    [18176431]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Glory
Примуса починяю
3. Если оказывается, что 99% записей лишние, таблица чистится, как вариант, перенесением полезной части в новую временную таблицу, и переименованием.

Вам знакома команда DELETE ?
А я бы ещё добавил: WHERE?
Да и сохранять результат запроса во временной таблице приходится не так уж часто.
21 сен 15, 16:36    [18176462]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
Glory
Примуса починяю
3. Если оказывается, что 99% записей лишние, таблица чистится, как вариант, перенесением полезной части в новую временную таблицу, и переименованием.

Вам знакома команда DELETE ?


Ну, вероятно, delete 99% строк будет дольше, чем выборка 1% строк по индексу
21 сен 15, 16:37    [18176468]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
Примуса починяю
Ну, вероятно, delete 99% строк будет дольше, чем выборка 1% строк по индексу

Тогда вам не знакома фраза WHERE которая может выбрать "1% строк по индексу" ?
21 сен 15, 16:39    [18176477]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Ещё лучше применять WHERE в процессе вставки -
тогда и удалять ничего не придётся или перебрасывать куда-то.
21 сен 15, 16:44    [18176511]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
iap
А я бы ещё добавил: WHERE?


Плохое слово. Пока что переброска нужных данных в отдельную таблицу дает лучшие результаты, чем добавление условий в последующие запросы. Но это такое. Понятно, что проблему можно обойти, причем разными способами. Пока скажите, что проблема есть. Т.е. переименовать временную таблицу нельзя.
21 сен 15, 16:49    [18176547]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
iap
Ещё лучше применять WHERE в процессе вставки -
тогда и удалять ничего не придётся или перебрасывать куда-то.


:). В процессе вставки сильно сложно. Слона нужно есть по кусочкам.
21 сен 15, 16:51    [18176559]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
invm
Member

Откуда: Москва
Сообщений: 9780
Примуса починяю,

Временные таблицы переименовывать нельзя. By design.
Если уж вам приспичило, то можно сделать так:
select * into #d from #t where ...;
truncate table #t;
insert into #t select * from #d;
21 сен 15, 16:56    [18176599]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
invm,

Спасибо.

invm
Если уж вам приспичило, то можно сделать так:
select * into #d from #t where ...;
truncate table #t;
insert into #t select * from #d;


Не лучший выход, т.к. в #t eсть identity поле. Т.е. придется делать дополнительные движения.
21 сен 15, 17:05    [18176669]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Примуса починяю
invm,

Спасибо.

invm
Если уж вам приспичило, то можно сделать так:
select * into #d from #t where ...;
truncate table #t;
insert into #t select * from #d;



Не лучший выход, т.к. в #t eсть identity поле. Т.е. придется делать дополнительные движения.
Временные таблицы вы создаёте сами.
Зачем же делаете там поля с IDENTITY, если потом это так мешает?
21 сен 15, 17:06    [18176684]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
iap
Зачем же делаете там поля с IDENTITY, если потом это так мешает?


Зачем поле с IDENTITY - традиционно, чтоб все строки различались. Позже это мешает - ну, понятно, что нет в жизни счастья. Есть локальные минимумы. Вот, ищу такой минимум :).
21 сен 15, 17:19    [18176793]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
invm
Member

Откуда: Москва
Сообщений: 9780
Примуса починяю
Зачем поле с IDENTITY - традиционно, чтоб все строки различались
Сделать строки различающимися можно и без identity.

Сделайте уже хоть какие-нибудь самостоятельные телодвижения для решения своей проблемы.
21 сен 15, 17:32    [18176941]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
Примуса починяю
Guest
invm,

Спасибо за помощь, извините за беспокойство.

К чему мои последние посты - любую задачу не нужно считать "глупой изначально". Просто, как элемент общей культуры.
21 сен 15, 18:00    [18177120]     Ответить | Цитировать Сообщить модератору
 Re: Переименовать временную таблицу  [new]
invm
Member

Откуда: Москва
Сообщений: 9780
Примуса починяю
любую задачу не нужно считать "глупой изначально".
Не нужно обобщать и додумывать за кого-то.
Если хотите помощи - публикуйте все условия и ограничения. Иначе получается пустая трата чужого времени.
21 сен 15, 18:39    [18177344]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить