2011-09-26 6 views
1

У меня есть две таблицы, регистрация и посещаемость. Первичные ключи регистрации - UnitCode и StudentID. Первичные ключи присваивания - это UnitCode, StudentID (оба из которых являются внешними ключами в тех же столбцах при регистрации) и AssNo.SQL - Вставить заявление, противоречащее внешнему ключу

У меня есть хранимая процедура Insert Student Участники:

ALTER PROCEDURE dbo.InsertStudentAttendance 

@unitCode varchar(4), 
@studentID integer, 
@date datetime 

AS 
    INSERT INTO Attendance 
    (UnitCode, StudentID, AttDate, AttStatus) 
    VALUES(@unitCode, @studentID, @date, 1) 
    RETURN 

Вызова процедуры, как так:

InsertStudentAttendance 'SIT101', 1, '2011-06-04'

Результаты в погрешности:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Attendance_308E3499". The conflict occurred in database "db_test", table "dbo.Enrolment". 

Однако, это происходит только тогда, когда я использую STOR а не когда я вручную вводим значения в ту же самую команду. В разделе «Регистрация» имеется идентификатор StudentID 1, зарегистрированный в UnitCode «SIT101». Любые идеи, что происходит не так?

Заранее спасибо.

+0

Вы забыли указать информацию о таблице. «Первичные ключи зачисления ...» что? – Tony

+0

Как вы называете эту процедуру и какой SQL вы использовали при вставке вручную? Вы не забыли удалить строку, вставленную вручную, перед вызовом хранимой процедуры? –

ответ

1

В заявлении о сохраненной процедуре у вас есть @unitCode varchar(4), но, похоже, значение, которое вы пытаетесь вставить, равно SIT101.

Это будет бесшумно усечено до SIT1, которого не существует - отсюда нарушение FK.

Увеличьте длину типа параметра, соответствующую длине столбца.

Смежные вопросы