powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Violation of PRIMARY KEY constraint
16 сообщений из 16, страница 1 из 1
Violation of PRIMARY KEY constraint
    #39661357
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По какой причине может быть бага?

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO XXX
(
 ...
)
SELECT
...
FROM YYY
WHERE ...


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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
INSERT INTO XXX
(
 ...
)
VALUES
(
 ...
)


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

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

#Хэш=
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661360
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15, хреново написанный триггер?
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661371
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser04cf9f9576a6f15, хреново написанный триггер?Нет триггеров.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661372
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15какой именно ключ (значения) она пытается вставить неудачно?Вообще-то, эта информация есть в сообщении об ошибке. Это прикрутили, ЕМНИП, еще в версии 2008.

Выполните
Код: sql
1.
2.
3.
4.
5.
6.
SELECT
 столбцы составного ключа
FROM YYY
WHERE ...
GROUP BY столбцы составного ключа
HAVING count(*) > 1

и увидите проблему.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661373
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15,

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

Код: sql
1.
2.
3.
SELECT
...
FROM YYY
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661377
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15,

Предположу, что "Если вставлять строки по одной оператором" Вы делаете вручную из SSMS.
А вот "FROM YYY WHERE " у Вас отрабатывает откуда-то не один раз, а несколько, из клиентского приложения , Вы же уверены, что будет выполнено один раз.
Ну или dynamic sql крутится в цикле несколько раз, а условие получается одинаковым, а не разным where, как Вы думаете.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661385
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm04cf9f9576a6f15какой именно ключ (значения) она пытается вставить неудачно?Вообще-то, эта информация есть в сообщении об ошибке. Это прикрутили, ЕМНИП, еще в версии 2008.Есть? В том и дело, что нет. И это удивило.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661388
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP04cf9f9576a6f15,

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

#Хэш=
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661389
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка где-то в трех точках
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661391
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичОшибка где-то в трех точкахУгу.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661392
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15Andy_OLAP04cf9f9576a6f15,

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

#Хэш=
Еще раз. Клиентское приложение вызывает ДВАЖДЫ хранимку. Поэтому при второй попытке вставить в XXX те же строки из YYY вываливается с ошибкой. А Вы из SSMS однократно вызываете хранимку.
Приложение уж не на APS.NET ли написано? Симптомы больно похожие.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661398
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уф, нашёл.

Код: sql
1.
2.
3.
4.
SELECT
...
FROM YYY
WHERE ...


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

#Хэш=
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661407
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15Есть? В том и дело, что нет. И это удивило.Значит сервер древнее 2008 R2.
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661459
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm04cf9f9576a6f15Есть? В том и дело, что нет. И это удивило.Значит сервер древнее 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)
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661472
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
04cf9f9576a6f15invmпропущено...
Значит сервер древнее 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)Сервиспаки? Обновления? Это все для трусов!
...
Рейтинг: 0 / 0
Violation of PRIMARY KEY constraint
    #39661577
04cf9f9576a6f15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичСервиспаки? Обновления? Это все для трусов!Такие админы в конторе. Такое руководство. У меня нет полномочий, возможностей и желания ходить и всех пинать. Зимой это уже чуть не привело к моему увольнению. Так что я забил. Молча работаю с тем, что дают.

Таки да, оказывается, диагностика зависит от сервис пака:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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).#Хэш=
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Violation of PRIMARY KEY constraint
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]