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

Откуда:
Сообщений: 24
В процедуре создаю индекс на глобпльную временную таблицу. И потом, в этой же процедуре, обращаясь к таблице явно указываю созданный индекс. Однако при выполнении выдается ошибка, что индекс не существует. Что это? И что с этим делать?!
2 фев 04, 12:34    [516843]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Скрипт ваш предъявите.
2 фев 04, 12:36    [516846]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Версия сервера?
2 фев 04, 12:44    [516862]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
Версия : 8.0
2 фев 04, 12:47    [516868]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
Вот, фрагмент:

SELECT BI.id, round( sum(BI.amount) * 100 / sum(BI.amount), 0)as notdefaulttax
INTO ##tmp
FROM bill_item BI
where bi.price<>0
GROUP BY BI.id

CREATE INDEX ind_id on ##tmp (id)

INSERT INTO T1 (SP_id, SR_id, CG_id,
discount, price,taxes, bs, NotdefaultTax)
SELECT
SR.service_provider_id, BI.service_id, CU.customer_category_id,
sum(BI.discount), sum(BI.price), sum(BI.taxes), count(*),Tmp.notdefaulttax
FROM
bill B,
bill_item BI,
customer CU,
service SR,
##tmpTmp
WHERE 1 = 1
and BI.service_id = SR.service_id
and BI.bill_item_id = Tmp. bill_item_id
and B.CustomerId = CU.customer_id
and CU.unique_number >= 0
GROUP BY
SR.service_provider_id, BI.service_id, CU.customer_category_id,
Tmp.notdefaulttax
2 фев 04, 12:54    [516882]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
а, забыла добавить :

from ....

##tmp Tmp (index = ind_bill_item_id)
2 фев 04, 12:56    [516888]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Glory
Member

Откуда:
Сообщений: 104760
CREATE INDEX ind_id on ##tmp (id)
##tmp Tmp (index = ind_bill_item_id)

Какое-то несоответствие ??
2 фев 04, 13:07    [516916]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
ой, ну это я хотела сократить :)
Я правильно вызываю, с нужным именем.
2 фев 04, 13:14    [516935]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
ой, ну это я хотела сократить :)
Я правильно вызываю, с нужным именем.


А может быть, всё-таки, тоже где-то подсокращено для красоты? У меня аналогичная конструкция работает прекрасно.
2 фев 04, 13:31    [516981]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
Нет, правдо, индекс не создается почему-то. После того как процедура заканчивается, я в окне Query Analyzer пытаюсь создать тот же самый индекс, на ту же самую таблицу и он его без проблем создает, а должен ругаться - говорить, что уже существует! Но нет!!!!
2 фев 04, 13:36    [517001]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Ц
Guest
Потому, что при компиляции процедуры индекса ещё нет, а таблица быть может, уже есть. В общем, таблица становится известной после создания, по моему так.
Lolita, а я знаю, где вы работаете!
А зачем вам глобальная временная таблица?
2 фев 04, 13:47    [517020]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
Я создаю таблицу и следующей строкой индекс. Все в одной процедуре.
2 фев 04, 13:55    [517040]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 Lolita

А зачем вам глобальная временная таблица, да еще и с индексом?
2 фев 04, 13:57    [517044]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
Затем, что эта таблица используется несколькими, вызывающимися подряд процедурами.
2 фев 04, 13:59    [517048]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
вызывающимися подряд процедурами


Если эти процедуры одной сессии, то и локальной можно обойтись.
2 фев 04, 14:07    [517061]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Lolita
Member

Откуда:
Сообщений: 24
Локальную не видно
2 фев 04, 14:09    [517067]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Откуда?
2 фев 04, 14:09    [517069]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Локальную надо создавать в самой первой процедуре, из которой и вызывать все остальные, тогда все будет видно.
2 фев 04, 14:49    [517195]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Или прям с клиента, тогда отовсюду будет видно.
2 фев 04, 15:11    [517255]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос!  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Но перекомпиляции начнутся...
Можно попробовать перейти на возврат курсора...
2 фев 04, 19:33    [517850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить