powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Повторное создание временной таблицы в ХП
17 сообщений из 17, страница 1 из 1
Повторное создание временной таблицы в ХП
    #39732358
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, дамы и господа.

Прошу ваших советов по ситуации:

Делаю ХП с разветвлённой логикой.
По одной ветке логики нужен SELECT INTO #myTab
По др. ветке логики (ELSE) надо CREATE TABLE #myTab, чтобы обезпечить её наличие, т.к. в дальнейшем она используется в результирующем SELECT.

Однако, создать такую ХП не удаётся, компилятор тупит и не видит моей логики.
Ошибка: В базе данных уже существует объект с именем "#myTab".
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732360
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо так делать. Создавайте таблицу один раз без всяких if через create table.
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732362
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изначально так и было:
CREATE #myTab
затем
INSERT INTO #myTab.

Однако запрос очень велик, выполняется долго.
Недавно узнал, что SELECT INTO выполняет более чем в 2 раза быстрее. Это действительно так, проверял.
Захотел переделать ХП, а тут такая ошибка.
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732371
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVP,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
 ...
into
 #MyTab
from
 ...
where
 (условие из if = true) and
 ...
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732372
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVP,

Можно спрятать SELECT INTO #myTab в EXEC
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732376
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, спасибо, неплохой совет. К сожалению, помимо этого SELECT INTO в данной ветке логики ещё много всего, включая наполнение ещё пары временных таблиц для использования их в этом SELECT INTO.
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732382
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPК сожалению, помимо этого SELECT INTO в данной ветке логики ещё много всего, включая наполнение ещё пары временных таблиц для использования их в этом SELECT INTO.И чем это мешает?
Наполнение временных таблиц можно сделать аналогичнымспособом.
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732395
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eleanor, попробовал, но не работает. Наверное, EXEC делается не в той же сессии.
Данный SQL:
exec('CREATE TABLE #myTab (ID int primary key)')
SELECT * FROM #myTab
даёт ошибку Недопустимое имя объекта "#myTab".
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732396
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm, а ведь верно!
Спасибо!
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732423
Eleanor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPEleanor, попробовал, но не работает. Наверное, EXEC делается не в той же сессии
Действительно. Получается только с глобальной временной таблицей, но она вам явно не нужна
Код: sql
1.
2.
3.
4.
5.
6.
7.
IF 1 = 1
BEGIN
	EXEC('SELECT * INTO ##myTab FROM sys.tables')
	SELECT * FROM ##myTab
END
ELSE
	CREATE TABLE ##myTab (ID int primary key)
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732447
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPИзначально так и было:
CREATE #myTab
затем
INSERT INTO #myTab.

Однако запрос очень велик, выполняется долго.
Недавно узнал, что SELECT INTO выполняет более чем в 2 раза быстрее. Это действительно так, проверял.
Захотел переделать ХП, а тут такая ошибка.

может INSERT INTO #myTab with (tablock) поможет?
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39732527
sti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVP,

ну сделайте в разных ветках разные временные таблицы. Вас всё равно проклянут те, кому потом придется с этой процедурой разбираться.
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39733880
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, может я чего-то не понимаю, а что мешает перед созданием таблицы вставить:
Код: sql
1.
2.
if object_id('tempdb..#t') is not null
Drop table #t


?
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39733886
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVP,

Судя по тому, что пишут

SELECT INTO

This method can be faster and more efficient than the first if your database is configured to use the simple or bulk logged recovery method, as the logging generated by the statement will be minimal.

возможно лучшим решением было бы посмотреть в сторону минимизации логирования, чем усложнять логику приложения
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39734064
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

авторчто мешает

дизайн сервера.
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39736760
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster, мешает компилятор SQL Server.

Попробуйте выполнить:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE #t(ID int)

if object_id('tempdb..#t') is not null
	Drop table #t

CREATE TABLE #t(ID int)
...
Рейтинг: 0 / 0
Повторное создание временной таблицы в ХП
    #39736864
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPЗ
Однако, создать такую ХП не удаётся, компилятор тупит и не видит моей логики.
Ошибка: В базе данных уже существует объект с именем "#myTab".

Скопируйте скрипт в новое окна и запустите , либо
Код: sql
1.
2.
if object_id('tempdb..#t') is not null
Drop table #t
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Повторное создание временной таблицы в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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