Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 select into временная таблица (уже существует)  [new]
Raven Melancholic
Member

Откуда:
Сообщений: 5
Требуется в зависимости от переданного параметра в хранимую процедуру выбрать либо факт продаж, либо факт закупок. Далее в хранимой процедуре выбранные данные обрабатываются неким образом. Факт записывается во временную таблицу.
Если писать:
select ItemId, LineAmount
into #TblFact
from CustInvoiceTrans
select * from #TblFact
все нормально работает.
Если писать:
select ItemId, LineAmount
into #TblFact
from VendInvoiceTrans
select * from #TblFact
Так же все работает.
Если же написать:
IF @TypeFact = 1
BEGIN
   select ItemId, LineAmount
   into #TblFact
   from CustInvoiceTrans
   select * from #TblFact
END
ELSE
BEGIN
   select ItemId, LineAmount
   into #TblFact
   from VendInvoiceTrans
   select * from #TblFact
END
То выдается ошибка существования таблицы #TblFact по строке, которая идет за ELSE BEGIN.
Но этой таблицы пока нет! Я даже не запускал пакет, перезапускал сервер, проверял tempdb( он пустой в ветке таблиц).
Почему MS SQL считает, что временная таблица уже существует?
25 сен 10, 21:21    [9501990]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
Raven Melancholic
Member

Откуда:
Сообщений: 5
Кстати, если после ELSE BEGIN вместо #TblFact написать #TblFact1, то все работает, но это не то, что мне нужно: мне требуется далее обрабатывать факт, соединяя его с планом, так что таблица факта должна быть одна.
PS: версия MS SQL - 2005, SP2
25 сен 10, 21:32    [9502021]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
Raven Melancholic
Member

Откуда:
Сообщений: 5
Может поможет, сообщение выдается следующее:
автор
Msg 2714, Level 16, State 1, Line 761
There is already an object named '#TmpFactTable' in the database.
25 сен 10, 21:34    [9502034]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Raven Melancholic,

Что мешает написать CREATE TABLE, а после этого INSERT разных данных по условию?
25 сен 10, 21:34    [9502035]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
Raven Melancholic
Member

Откуда:
Сообщений: 5
iap
Raven Melancholic,

Что мешает написать CREATE TABLE, а после этого INSERT разных данных по условию?

Спасибо за совет, попробую так (думаю нет причин, по которым это не сработает)
В общем-то, ничего не мешает (кроме лени перечислять около полутора десятков полей - в примере их два, но на самом деле немного побольше, но не все существующие в таблицах: это DAX4). Просто интересно, почему в случае, если таблица еще даже не пыталась создаться, выдается ошибка о её существовании.
25 сен 10, 21:47    [9502074]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Raven Melancholic
В общем-то, ничего не мешает (кроме лени перечислять около полутора десятков полей - в примере их два, но на самом деле немного побольше, но не все существующие в таблицах: это DAX4).
Создать можно и так:
select top 0 ItemId, LineAmount
into #TblFact
from CustInvoiceTrans;
25 сен 10, 21:52    [9502101]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
Raven Melancholic
Member

Откуда:
Сообщений: 5
iap
Создать можно и так:...

Спасибо, самостоятельно я до такого не додумался, создавал обычным CREATE TABLE.
26 сен 10, 10:05    [9502661]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
aleks2
Guest
Ну, можно и так

 select ItemId, LineAmount into #TblFact
 from 
 ( select ItemId, LineAmount  
   FROM  CustInvoiceTrans
   where @TypeFact = 1
   UNION ALL
   select ItemId, LineAmount
   from VendInvoiceTrans
   where not @TypeFact = 1
 ) X

 select * from #TblFact
26 сен 10, 16:00    [9503257]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
Beglanka
Member

Откуда:
Сообщений: 4
Хм, а у меня поле id identity и мне надо, чтобы номера вставленных строк всегда начинались с единицы.

У меня в первой ветке условного оператора временная таблица используется один раз, а во второй она должна в цикле создаваться и удаляться. Возникает та же самая ошибка.

Если сначала создать таблицу, а потом грузить в нее данные и удалять, то номера строк не будут начинаться с единицы - неудобно.

Почему вылезает эта ошибка?
26 сен 11, 19:30    [11337933]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
iljy
Member

Откуда:
Сообщений: 8711
Beglanka,

само по себе присутствие цикла с вероятностью 99% говорит, что задача решена коряво. А номера строк можно генерить с помощью ROW_NUMBER какие вам хочется.
26 сен 11, 19:39    [11337973]     Ответить | Цитировать Сообщить модератору
 Re: select into временная таблица (уже существует)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Beglanka
Если сначала создать таблицу, а потом грузить в нее данные и удалять, то номера строк не будут начинаться с единицы - неудобно.
А если правильно удалять, используя truncate?
26 сен 11, 21:16    [11338337]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить