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

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

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

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

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

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

Можно спрятать SELECT INTO #myTab в EXEC
...
Рейтинг: 0 / 0
13.11.2018, 13:05
    #39732376
AndreyVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
invm, спасибо, неплохой совет. К сожалению, помимо этого SELECT INTO в данной ветке логики ещё много всего, включая наполнение ещё пары временных таблиц для использования их в этом SELECT INTO.
...
Рейтинг: 0 / 0
13.11.2018, 13:12
    #39732382
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
AndreyVPК сожалению, помимо этого SELECT INTO в данной ветке логики ещё много всего, включая наполнение ещё пары временных таблиц для использования их в этом SELECT INTO.И чем это мешает?
Наполнение временных таблиц можно сделать аналогичнымспособом.
...
Рейтинг: 0 / 0
13.11.2018, 13:20
    #39732395
AndreyVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
Eleanor, попробовал, но не работает. Наверное, EXEC делается не в той же сессии.
Данный SQL:
exec('CREATE TABLE #myTab (ID int primary key)')
SELECT * FROM #myTab
даёт ошибку Недопустимое имя объекта "#myTab".
...
Рейтинг: 0 / 0
13.11.2018, 13:21
    #39732396
AndreyVP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
invm, а ведь верно!
Спасибо!
...
Рейтинг: 0 / 0
13.11.2018, 13:57
    #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
13.11.2018, 14:30
    #39732447
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
AndreyVPИзначально так и было:
CREATE #myTab
затем
INSERT INTO #myTab.

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

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

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


?
...
Рейтинг: 0 / 0
16.11.2018, 09:47
    #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
16.11.2018, 12:58
    #39734064
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
uaggster,

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

дизайн сервера.
...
Рейтинг: 0 / 0
22.11.2018, 13:16
    #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
22.11.2018, 15:02
    #39736864
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повторное создание временной таблицы в ХП
AndreyVPЗ
Однако, создать такую ХП не удаётся, компилятор тупит и не видит моей логики.
Ошибка: В базе данных уже существует объект с именем "#myTab".

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


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