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

Откуда: Київ
Сообщений: 10428
Есть скрипт:

if NOT(object_id('tempdb..#ex6') IS NULL)		drop table #ex6;
....
SELECT * from ex
into #ex6
....
ALTER TABLE #ex6  WITH NOCHECK 
ADD CONSTRAINT [PK_temp_ex6_int_id] PRIMARY KEY CLUSTERED ([int_id])
WITH (FILLFACTOR = 75, PAD_INDEX = ON);


И здесь не постоянно, но изредка получаю ошибку,
что объект PK_temp_ex6_int_id уже существует.
При этом селект из объектов темпдб не показывает такой объект.
Повторно выполнил - то же, переключился на другую базу, вернулся на эту же, выполнил - нет ошибки.

Выполняю скрипт для разных баз на этом же сервере, может что-то в темпдб клинит?
25 июл 14, 12:39    [16356890]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
А что, другой процесс не может создавать ограничение с таким именем в принципе?
25 июл 14, 12:44    [16356919]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Winnipuh,

потому что имя констрейнта, как и любого другого объекта, уникально в одной и той же схеме.
А код по созданию временной таблицы, небось, выполняется несколькими клиентами при живой
временной таблице одного из них!
Не надо явно задавать имя констрейнта временной таблицы!
Тогда сервер его сам придумает. Причём, для каждого клиента своё!
25 июл 14, 12:45    [16356932]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
ALTER TABLE #ex6  WITH NOCHECK 
ADD PRIMARY KEY CLUSTERED ([int_id]);
25 июл 14, 12:47    [16356943]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
ALTER TABLE #ex6  WITH NOCHECK 
ADD PRIMARY KEY CLUSTERED ([int_id]);
Или прямо в CREATE TABLE написать
25 июл 14, 12:47    [16356952]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вот нельзя просто взять и создать обычный кластерный индекс, зачем-то понадобился констрейнт на временной таблице.
25 июл 14, 13:44    [16357384]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вот это вот, кстати, вообще сказка - WITH (FILLFACTOR = 75, PAD_INDEX = ON)
Вы в эту времянку собрались еще данные вставлять? Если да, то зачем создавать индекс до вставки? Если нет, нахрена филлфактор, отличный от 100?
25 июл 14, 13:45    [16357397]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
iap
iap
ALTER TABLE #ex6  WITH NOCHECK 
ADD PRIMARY KEY CLUSTERED ([int_id]);
Или прямо в CREATE TABLE написать


да, сделаю так..

нельзя во время create, поскольку создается она вот так

SELECT * from ex into #ex6
25 июл 14, 14:07    [16357554]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Winnipuh
iap
пропущено...
Или прямо в CREATE TABLE написать


да, сделаю так..

нельзя во время create, поскольку создается она вот так

SELECT * from ex into #ex6
Просто индекс создать, и всё. Зачем PK, если ссылаться всё равно нельзя?
Индекс - не объект, имя уникально в пределах таблицы!
25 июл 14, 14:10    [16357587]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает такая ошибка при создании constraint?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гавриленко Сергей Алексеевич
Вот это вот, кстати, вообще сказка - WITH (FILLFACTOR = 75, PAD_INDEX = ON)
Вы в эту времянку собрались еще данные вставлять? Если да, то зачем создавать индекс до вставки? Если нет, нахрена филлфактор, отличный от 100?


да, согласен, копипастнул.

А по поводу этого замечания:

"Вот нельзя просто взять и создать обычный кластерный индекс, зачем-то понадобился констрейнт на временной таблице"

На существующей временной таблице с данными

Я исследую, может он там нафиг не нужен , но сам вопрос интересный
25 июл 14, 14:13    [16357614]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить