Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Про временные таблицы / 8 сообщений из 8, страница 1 из 1
20.08.2001, 13:43
    #32012261
Alexander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Подскажите как можно обмануть "заумный" SQL

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

if <cond>
select <fields>
into #TABLE1
else
select <fields>
into #TABLE1

При попытке разестить такую хранимую процедуру на сервере выдается сообщение об ошибке "There is already an object named '#TABLE1' in the database."

Как можно решить проблему не прибегая к созданию временной таблицы перед выполнением запросов и дальнейшей вставки записей в эту временную таблицу
...
Рейтинг: 0 / 0
20.08.2001, 14:01
    #32012265
VictorS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Может вот так попробывать?


select <fields>
into #TABLE1
WHERE <cond1>
UNION
select <fields>
WHERE <cond2>
...
Рейтинг: 0 / 0
20.08.2001, 14:01
    #32012266
Tarantino
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Ни как, влюбом случае надо создавать временную таблицу
...
Рейтинг: 0 / 0
20.08.2001, 14:36
    #32012271
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
На самом деле в BOL рекомендуется сначала создать временную таблицу с помощью CREATE TABLE,
а уж потом вставлять в нее записи, что объясняется тем, что при создании временной таблицы
с помощью SELECT ... INTO #Table, temdb будет блокироваться исключительно, до тех пор, пока не
закончится вставка данных, что чревато, если происходит длительная выборка(1000-и строк).
Сам это проверял, но есть подозрение, что они не врут
В 1 же случае, temdb блокируется только на момент создания БД, то есть - CREATE.
...
Рейтинг: 0 / 0
20.08.2001, 15:40
    #32012278
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Насчет блокировки тоже не проверял, но по скорости выполнение вливание данных в уже созданную таблицу быстрей однозначно. Проверено.
...
Рейтинг: 0 / 0
21.08.2001, 06:20
    #32012317
AnKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Хотя немного отклоняюсь от изначальной темы, просто в продолжение о создании временных таблиц и вливания в них. Безусловно, CREATE TABLE #Tmp1.... + INSERT INTO #Tmp1... работает быстрее, чем SELECT ... INTO #Tmp1 ... Однако в первом случае при CREATE TABLE приходится полностью описывать поля, что не всегда удобно. Если временная таблица по структуре едентична существующей, я делаю SELECT * INTO #Tmp1 FROM T1 WHERE 1=2, а потом уже INSERT INTO #Tmp1...
Это так, просто советик. Может, кому пригодиться.
...
Рейтинг: 0 / 0
21.08.2001, 06:29
    #32012321
Pandre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Несколько раз встречался с тем, что select * into #tmp from t1 создает неправильную по структуре таблицу #tmp (допустим вместо varchar(32) создается varchar(1), если это поле в исходной таблице заполнено NULL)
...
Рейтинг: 0 / 0
21.08.2001, 07:24
    #32012337
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Про временные таблицы
Тоже с этим сталкивался. Лечится с помощью CAST/CONVERT. А вариант AnKa мне понравился.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Про временные таблицы / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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