Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование временных таблиц / 10 сообщений из 10, страница 1 из 1
29.10.2002, 04:54:17
    #32062501
abrikos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Для получения упорядоченых номеров строк я создаваю временные таблицы со случайными именами и вних вставляю IDENTITY(smallint, 1, 1) . После выборки результата - execute('DROP TABLE '+@tmp).
Создание и удаление таблиц очевидно не есть хорошая вещь.
Вопросы:
Чем может обернуться частое создание и удаление таблиц?
Может есть лучшее решение?
...
Рейтинг: 0 / 0
29.10.2002, 09:54:11
    #32062538
Белов Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Первое что пришло в голову
Если ты часто используешь временную таблицу, то вместо постоянного CREATE... DROP... (кстати, данные операции записываются в лог, правда tempdb имеет модель simple), лучше делать TRUNCATE TABLE - быстрее работает
...
Рейтинг: 0 / 0
29.10.2002, 10:26:35
    #32062556
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Не совсем понятна ваша трактовка термина временная таблица. Это все таки системная временная таблица или ваша "временная" таблица.
...
Рейтинг: 0 / 0
30.10.2002, 04:40:40
    #32062924
abrikos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Временная - моя таблица : execute('CREATE TABLE '+@temptable)
...
Рейтинг: 0 / 0
30.10.2002, 05:01:58
    #32062926
abrikos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
немного подробнее о задаче:
Необходимо для нескольких пользователей практически одновременно делать выборку из таблицы во "временную" со вставкой в результат выборки IDENTITY().
Я пошел по самому тривиальному пути - каждому пользователю отсылать выборку в таблицу со случайным именем и после получения выборки удалять эту таблицу. По этому я и назвал такие таблицы временными.
И повторяясь:
Насколько плох (и чем) этот способ?
Можете посоветовать лучший способ?
...
Рейтинг: 0 / 0
30.10.2002, 09:54:30
    #32062970
vap
vap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
=Насколько плох (и чем) этот способ?
Плох тем, что плохая масштабируемость. Если пользователей много, то генерить каждому пользователю таблицу - дорогое удовольствие.
Может лучше добавить в таблицу ID пользователя ?
...
Рейтинг: 0 / 0
30.10.2002, 10:20:21
    #32062993
Белов Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Опять же маштабируемость
Чем тебе не нравится использование временных таблиц SQL Server ? Если, конечно, это не связано с маштабной переделкой проекта.
А способ TRUNCATE - однозначно лучше, быстрее и лог не растет. Только учти, что в truncate нельзя использовать where..., т.е. таблица полностью очищается
...
Рейтинг: 0 / 0
30.10.2002, 10:33:24
    #32063004
abrikos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Спасибо за советы.
Попробую подытожить:
1. Приложение вызывает хранимую процедуру
2. в процедуре создается #temp_table,
3. в нее пишутся результаты выборки
4. результаты считываются
5. TRUNCATE

Что будет происходить если одновременно эту процедуру будут выполнять несколько приложений? Не заблокируется временная таблица?
...
Рейтинг: 0 / 0
30.10.2002, 11:00:18
    #32063022
Left Margin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
Примерно так:

>1. Приложение вызывает хранимую процедуру
>2. в процедуре создается #temp_table,
>3. в нее пишутся результаты выборки
>4. результаты считываются
>5. TRUNCATE

п.5 не нужен, поскольку таблица временная ( в терминах именно SQL Server'a, если создавать как #table_name, именно с #), по окончании сессии она должна благополучно грохаться, сама. Блокировки тоже не будет, поскольку для каждой сессии создается уникальная таблица.

ежели не прав, пинайте.
...
Рейтинг: 0 / 0
30.10.2002, 11:06:49
    #32063025
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование временных таблиц
2abrikos
Спасибо за советы.
Попробую подытожить:
1. Приложение вызывает хранимую процедуру
2. в процедуре создается #temp_table,
3. в нее пишутся результаты выборки
4. результаты считываются
5. TRUNCATE

Что будет происходить если одновременно эту процедуру будут выполнять несколько приложений? Не заблокируется временная таблица?

Выбирайте один из двух путей:
1. Если временная таблица нужна только в одной процедуре и в вызываемыхиз ней процедурах, то создаёте временную таблицу в ней (create table #MyTable(...)). Дропать её не надо - она сама исчезнет после выхода из процедуры. Другие пользователи её не увидят.

1. Если временная таблица нужна при вызове многих процедур, и/или длительное время, то создаёте временную таблицу в коннекте (из клиента). Дропать её нужно, когда она не нужна, но она сама исчезнет после закрытия коннекта. Другие пользователи её не увидят.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Использование временных таблиц / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]