Ошибка, которую вы видите, означает, что вы пытаетесь создать запись с тем же значением первичного ключа, что и другая существующая запись. Вы делаете ошибку здесь, но не даете достаточно информации, чтобы понять, в чем ваша ошибка.
Когда у меня возникает проблема, я считаю полезным создать маленькое репро, которое может проиллюстрировать проблему, чтобы я мог показать ее другим пользователям. Иногда, когда я пытаюсь создать простое воспроизведение, оно на самом деле работает без проблем. Это позволяет мне понять, что в этом рабочем «репро» и моем проблемном случае есть что-то другое Следующим шагом для меня будет преодоление разрыва между ними, изменение любого из них, чтобы сделать их ближе, пока разница в поведении не исчезнет. Шаг, который сделал это, обычно выявляет виновника исследуемого поведения.
В вашем случае я могу сделать следующие простые шаги, чтобы доказать, что SQL Server работает должным образом:
Я создаю таблицу:
CREATE TABLE [dbo].[StudentCourse](
[StudentID] [int] NOT NULL,
[CourseID] [int] NOT NULL,
CONSTRAINT [PK_StudentCourse] PRIMARY KEY CLUSTERED
(
[StudentID] ASC,
[CourseID] ASC
))
Я добавляю данные теста в:
INSERT INTO [dbo].[StudentCourse] values (1,1)
INSERT INTO [dbo].[StudentCourse] values (1,2)
INSERT INTO [dbo].[StudentCourse] values (1,3)
INSERT INTO [dbo].[StudentCourse] values (2,2)
INSERT INTO [dbo].[StudentCourse] values (2,3)
INSERT INTO [dbo].[StudentCourse] values (2,4)
Я выполняю обновления, которые вы описали:
UPDATE [dbo].[StudentCourse] SET CourseID = 5 where StudentId = 2 and CourseID = 4
UPDATE [dbo].[StudentCourse] SET CourseID = 5 where StudentId = 1 and CourseID = 1
Я вижу, что они работают так же, как и должны.
Постарайтесь понять, что вы делаете по-другому, и вы найдете причину своей проблемы.