Обновление SQL: не может изменить одно из значения композитного ключа первой записи

StackOverflow https://stackoverflow.com/questions/5848287

Вопрос

В 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

Я вижу, что эти работают так, как должны.

Постарайтесь понять, что вы делаете по -другому, и вы найдете причину вашей проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top