Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 В хранимке : временная таблица уже существует  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Добрый день.
В хранимке есть кусок вида:
IF @GO=1
BEGIN
  SELECT A INTO #WS_DEPTS1 FROM TABLE1
END
ELSE
BEGIN
  SELECT A INTO #WS_DEPTS1 FROM TABLE2
END


При попытке обновить хранимку в БД выдаётся ошибка:
Msg 2714, Level 16, State 1, Procedure ParseXmlPersonInfo, Line 155
There is already an object named '#WS_DEPTS1' in the database.

Разве так нельзя?
14 июн 13, 14:46    [14434144]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
defragmentator
Разве так нельзя?

Именно так - нельзя
14 июн 13, 14:47    [14434156]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
defragmentator
Member

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

ну я так хочу. Что же делать?
14 июн 13, 14:48    [14434165]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Переведите текст ошибки, в ней все написано.
SELECT A INTO #WS_DEPTS1 - вы создаете таблицу с именем #WS_DEPTS1
14 июн 13, 14:48    [14434169]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
defragmentator
Добрый день.
В хранимке есть кусок вида:
IF @GO=1
BEGIN
  SELECT A INTO #WS_DEPTS1 FROM TABLE1
END
ELSE
BEGIN
  SELECT A INTO #WS_DEPTS1 FROM TABLE2
END



При попытке обновить хранимку в БД выдаётся ошибка:
Msg 2714, Level 16, State 1, Procedure ParseXmlPersonInfo, Line 155
There is already an object named '#WS_DEPTS1' in the database.

Разве так нельзя?
Нельзя. В момент компиляции сервер видит две команды создания таблицы с одним и тем же именем.
Разные ветки IF роли не играют.
14 июн 13, 14:49    [14434174]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
defragmentator
ну я так хочу. Что же делать?

Менять сервер на другой
14 июн 13, 14:52    [14434188]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Если я вынесу в отдельные хранимки заполнение временных таблиц, то они не будут доступны в вызвавшей процедуре?
14 июн 13, 14:52    [14434192]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
defragmentator
ну я так хочу.
А я хочу сто миллиардов баков!
Что же мне теперь делать?!

Если структура TABLE1 и TABLE2 одинакова, то сначала создать временную таблицу,
а после этого вставить записи в IFе
14 июн 13, 14:53    [14434193]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
defragmentator
Если я вынесу в отдельные хранимки заполнение временных таблиц, то они не будут доступны в вызвавшей процедуре?

Прочитайте в статье CREATE TABLE про области видимости временных таблиц и узнаете
14 июн 13, 14:54    [14434201]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
defragmentator
ну я так хочу.
А я хочу сто миллиардов баков!
Что же мне теперь делать?!

Если структура TABLE1 и TABLE2 одинакова, то сначала создать временную таблицу,
а после этого вставить записи в IFе
В этом случае можно и SELECT INTO FROM TABLE1 WHERE UNION ALL SELECT FROM TABLE2 WHERE.
Без всякого IF
14 июн 13, 14:55    [14434207]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
iap
iap
пропущено...
А я хочу сто миллиардов баков!
Что же мне теперь делать?!

Если структура TABLE1 и TABLE2 одинакова, то сначала создать временную таблицу,
а после этого вставить записи в IFе
В этом случае можно и SELECT INTO FROM TABLE1 WHERE UNION ALL SELECT FROM TABLE2 WHERE.
Без всякого IF

Надо или то, или другое
14 июн 13, 14:57    [14434217]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Glory
Member

Откуда:
Сообщений: 104751
defragmentator
Надо или то, или другое

Ну так поставьте в WHERE нужное условие
14 июн 13, 14:59    [14434229]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
defragmentator
iap
пропущено...
В этом случае можно и SELECT INTO FROM TABLE1 WHERE UNION ALL SELECT FROM TABLE2 WHERE.
Без всякого IF

Надо или то, или другое
В первом WHERE @GO=1, во втором - @GO<>1
14 июн 13, 15:01    [14434240]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Дак это я написал такие простые запросы тут, а в реале они с CTE.
Так пойдут?
14 июн 13, 15:07    [14434268]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
defragmentator
Дак это я написал такие простые запросы тут, а в реале они с CTE.
Так пойдут?
CTE (и даже несколько через запятую) напишете перед всем этим SELECTом.
В чём проблема-то?
14 июн 13, 15:11    [14434300]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
У Вас разная структура у этих таблиц получается, что ли? Почему не хотите написать один нормальный create table и потом нормальные Insert'ы?
14 июн 13, 15:13    [14434313]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
defragmentator,

Вместо того чтобы создавать таблицы на каждом шагу, создайте его один раз, а затем сделать вставки внутри, если заявление
14 июн 13, 15:25    [14434394]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Кот Матроскин,

Да лень. Надо структуру описывать целиком.
Ладно, попробую. Придётся
14 июн 13, 15:36    [14434445]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
natya,

CREATE TABLE #WS_DEPTS1
(
A <Тип данных такой же, как в TABLE1>
)

IF @GO=1
BEGIN
INSERT #WS_DEPTS1
SELECT A FROM TABLE1
END
ELSE
BEGIN
INSERT #WS_DEPTS1
SELECT A FROM TABLE2
END
14 июн 13, 15:38    [14434452]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
MyNiGoo
Member

Откуда:
Сообщений: 233
я стараюсь использовать "SELECT .. INTO .. " как можно реже примерно по тем же причинам, по которым не рекомендуют писать "select * from .. ". Лучше явным образом указывать названия полей и их типы, меньше шансов на ошибку.
14 июн 13, 16:18    [14434623]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
defragmentator
Да лень. Надо структуру описывать целиком.
Ладно, попробую. Придётся
Необязательно описывать целиком.

Можно создать пустую таблицу командой SELECT INTO, а протом наполнять её командами INSERT SELECT
14 июн 13, 18:41    [14435213]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
alexeyvg
defragmentator
Да лень. Надо структуру описывать целиком.
Ладно, попробую. Придётся
Необязательно описывать целиком.

Можно создать пустую таблицу командой SELECT INTO, а протом наполнять её командами INSERT SELECT

Также можно создать пустую таблицу командой SELECT INTO, а потом сгенерировать ее DDL.
14 июн 13, 19:06    [14435296]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
defragmentator
Кот Матроскин,

Да лень. Надо структуру описывать целиком.
Ладно, попробую. Придётся



ты же пробовал мой скрипт ?
15 июн 13, 01:05    [14436157]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
defragmentator
Member

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

спи
15 июн 13, 05:49    [14436483]     Ответить | Цитировать Сообщить модератору
 Re: В хранимке : временная таблица уже существует  [new]
natya
Member [заблокирован]

Откуда: Азербайджан, Баку
Сообщений: 347
defragmentator
natya,

спи




что ты хочеш мне сказат

не работает?
15 июн 13, 19:57    [14437216]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить