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

Откуда:
Сообщений: 2927
По какой причине может быть бага?

Происходит тут:

INSERT INTO XXX
(
 ...
)
SELECT
...
FROM YYY
WHERE ...

В таблице XXX просто нет строк с тем ключом, который вставляю по запросу из таблицы YYY. Ключ составной и одно из его полей банально всегда новое (выдаётся функцией SCOPE_IDENTITY после вставки в другую таблицу). Как можно при этом схватить дублирование ключа?

Если вставлять строки по одной оператором:

INSERT INTO XXX
(
 ...
)
VALUES
(
 ...
)

То всё нормально.

Понимаю, что пятница вечер, и мозг уже всё. Походу, я какую-то тонкость упустил. Может, кто знает как включить какую-то внутреннюю диагностику, чтобы понять, какой именно ключ (значения) она пытается вставить неудачно?

#Хэш=
15 июн 18, 15:51    [21494235]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
04cf9f9576a6f15, хреново написанный триггер?
15 июн 18, 15:53    [21494246]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
buser
04cf9f9576a6f15, хреново написанный триггер?
Нет триггеров.
15 июн 18, 16:05    [21494288]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
04cf9f9576a6f15
какой именно ключ (значения) она пытается вставить неудачно?
Вообще-то, эта информация есть в сообщении об ошибке. Это прикрутили, ЕМНИП, еще в версии 2008.

Выполните
SELECT
 столбцы составного ключа
FROM YYY
WHERE ...
GROUP BY столбцы составного ключа
HAVING count(*) > 1
и увидите проблему.
15 июн 18, 16:06    [21494294]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
04cf9f9576a6f15,

осталось угадать, что же за ключ и что жы вы делаете в

SELECT
...
FROM YYY
15 июн 18, 16:07    [21494297]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
04cf9f9576a6f15,

Предположу, что "Если вставлять строки по одной оператором" Вы делаете вручную из SSMS.
А вот "FROM YYY WHERE " у Вас отрабатывает откуда-то не один раз, а несколько, из клиентского приложения, Вы же уверены, что будет выполнено один раз.
Ну или dynamic sql крутится в цикле несколько раз, а условие получается одинаковым, а не разным where, как Вы думаете.
15 июн 18, 16:17    [21494350]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
invm
04cf9f9576a6f15
какой именно ключ (значения) она пытается вставить неудачно?
Вообще-то, эта информация есть в сообщении об ошибке. Это прикрутили, ЕМНИП, еще в версии 2008.
Есть? В том и дело, что нет. И это удивило.
15 июн 18, 16:31    [21494397]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Andy_OLAP
04cf9f9576a6f15,

Предположу, что "Если вставлять строки по одной оператором" Вы делаете вручную из SSMS.
А вот "FROM YYY WHERE " у Вас отрабатывает откуда-то не один раз, а несколько, из клиентского приложения, Вы же уверены, что будет выполнено один раз.
Ну или dynamic sql крутится в цикле несколько раз, а условие получается одинаковым, а не разным where, как Вы думаете.
Нет. После того, как вылетела бага в клиентском приложении, я запускаю из SSMS последовательность операторов, как они были в хранимке. Запускаю один раз. Потом откатываю транзакцию. Для диагностики вставляю PRINT и вывожу содержимое промежуточных таблиц. Но, результата пока нет. Пятница - такая пятница.

#Хэш=
15 июн 18, 16:34    [21494416]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36987
Ошибка где-то в трех точках
15 июн 18, 16:35    [21494417]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Гавриленко Сергей Алексеевич
Ошибка где-то в трех точках
Угу.
15 июн 18, 16:48    [21494475]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
04cf9f9576a6f15
Andy_OLAP
04cf9f9576a6f15,

Предположу, что "Если вставлять строки по одной оператором" Вы делаете вручную из SSMS.
А вот "FROM YYY WHERE " у Вас отрабатывает откуда-то не один раз, а несколько, из клиентского приложения, Вы же уверены, что будет выполнено один раз.
Ну или dynamic sql крутится в цикле несколько раз, а условие получается одинаковым, а не разным where, как Вы думаете.
Нет. После того, как вылетела бага в клиентском приложении, я запускаю из SSMS последовательность операторов, как они были в хранимке. Запускаю один раз. Потом откатываю транзакцию. Для диагностики вставляю PRINT и вывожу содержимое промежуточных таблиц. Но, результата пока нет. Пятница - такая пятница.

#Хэш=

Еще раз. Клиентское приложение вызывает ДВАЖДЫ хранимку. Поэтому при второй попытке вставить в XXX те же строки из YYY вываливается с ошибкой. А Вы из SSMS однократно вызываете хранимку.
Приложение уж не на APS.NET ли написано? Симптомы больно похожие.
15 июн 18, 16:50    [21494488]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Уф, нашёл.

SELECT
...
FROM YYY
WHERE ...

Условие в WHERE было сформулировано так, что в некоторых случаях выдавалось несколько строк с одинаковыми полями первичного ключа. То есть, их не было в изначальной таблице. Они появлялись при вставке. Невнимательность.

#Хэш=
15 июн 18, 16:57    [21494518]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
04cf9f9576a6f15
Есть? В том и дело, что нет. И это удивило.
Значит сервер древнее 2008 R2.
15 июн 18, 17:12    [21494578]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
invm
04cf9f9576a6f15
Есть? В том и дело, что нет. И это удивило.
Значит сервер древнее 2008 R2.


Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
15 июн 18, 20:06    [21495132]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36987
04cf9f9576a6f15
invm
пропущено...
Значит сервер древнее 2008 R2.


Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Сервиспаки? Обновления? Это все для трусов!
15 июн 18, 22:19    [21495389]     Ответить | Цитировать Сообщить модератору
 Re: Violation of PRIMARY KEY constraint  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
Гавриленко Сергей Алексеевич
Сервиспаки? Обновления? Это все для трусов!
Такие админы в конторе. Такое руководство. У меня нет полномочий, возможностей и желания ходить и всех пинать. Зимой это уже чуть не привело к моему увольнению. Так что я забил. Молча работаю с тем, что дают.

Таки да, оказывается, диагностика зависит от сервис пака:
SET NOCOUNT ON;

SELECT @@VERSION;

CREATE TABLE #temp
(
	Val INT NOT NULL PRIMARY KEY CLUSTERED
);

INSERT #temp(Val) VALUES(5);
INSERT #temp(Val) VALUES(5);

SELECT * FROM #temp;

DROP TABLE #temp;
GO
На одном сервере:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Сообщение 2627, уровень 14, состояние 1, строка 11
Violation of PRIMARY KEY constraint 'PK__#temp_____C5F0F34D75C0A3B0'. Cannot insert duplicate key in object 'dbo.#temp'.
На другом сервере:
Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

Сообщение 2627, уровень 14, состояние 1, строка 11
Нарушение "PK__#temp_____C5F0F34D42BCF8A1" ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект "dbo.#temp". Повторяющееся значение ключа: (5).
#Хэш=
16 июн 18, 17:05    [21496255]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить