Обновление SQL: не может изменить одно из значения композитного ключа первой записи
-
27-10-2019 - |
Вопрос
В MSSQL Server, У меня есть стол Студенческий курс с Композитный первичный ключ (Студенческий билет, Курс) Я пытаюсь сменить выбранного студента на другой курс. Один Студенческая запись каждой группы курсов мешает мне делать UPDATE
операция
StudentID CourseID
1 1
1 2
1 3
2 2
2 3
2 4
Я могу обновить (1, 2), (1, 3) записи ' Курс к 5, но я не могу обновить (1, 1) записи Курс к 5. Анкет Сравните, я могу обновить (2, 2), (2, 3) записи ' Курс к 5, но я не могу обновить (2,4) записи Курс к 5.
Только одна запись такого Курс группа мешает мне изменить его Курс поле. Я получаю следующую ошибку.
Нарушение ограничения первичного ключа 'pk_studentcourse'. Невозможно вставить дублированный ключ в объект «студенческий курс». Заявление было прекращено.
Я не знаю, что это первая или последняя запись каждой группы запрещает мне меняться Курс. Анкет Я уверен, что нет записи с CourceID = 5 в Студенческий курс стол, и у меня есть запись курса с Курс из 5 в Курс стол.
Любая помощь будет оценена.
Решение 2
Я нашел проблему. Когда я строил условия для строки запроса, одно условие не добавляло критерии группы. Строка запроса пропускает эту группу Crieria, когда эта запись была включена в строку запроса. Это происходило следующим образом.
UPDATE StudentCourse SET CourseID = 5 WHERE CourseID = 1 AND StudentID IN(2,3)
UPDATE StudentCourse SET CourseID = 5 WHERE StudentID IN(1,2,3)
UPDATE StudentCourse SET CourseID = 6 WHERE CourseID = 2 AND StudentID IN(2,3)
UPDATE StudentCourse SET CourseID = 6 WHERE StudentID IN(2,3,4)
Конечно, мой запрос нарушал первичное правило без критериев курса. Спасибо за ваше время, друзья.
Другие советы
Ошибка, которую вы видите, означает, что вы пытаетесь создать запись с тем же значением первичного ключа, что и другая существующая запись. Вы делаете ошибку здесь, но вы не даете достаточно информации, чтобы понять, какова ваша ошибка.
Когда у меня возникает проблема, я нахожу полезным для создания небольшой резо, которая может проиллюстрировать проблему, чтобы я мог показать ее другим пользователям. Иногда, когда я пытаюсь создать простую резо, резо на самом деле работает без проблем. Это позволяет мне знать, что в этой рабочей «резо» есть что -то другое и мое проблема. Следующим шагом для меня будет преодоление разрыва между ними, изменить любого из них, чтобы сделать их ближе, пока разница в поведении не исчезнет. Шаг, который сделал это, обычно раскрывает виновника исследуемого поведения.
В вашем случае я могу сделать следующие простые шаги, чтобы доказать, что 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
Я вижу, что эти работают так, как должны.
Постарайтесь понять, что вы делаете по -другому, и вы найдете причину вашей проблемы.