SQL - 插入与外键冲突的语句

时间:2011-09-26 11:32:11

标签: sql-server insert conflict

我有两张桌子,报名和出席。注册的主要键是UnitCode和StudentID。 Assignment的主键是UnitCode,StudentID(两者都是Enrollment中相同列的外键)和AssNo。

我有一个名为Insert Student Attendance的存储过程:

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".

但是,这仅在我使用存储过程时发生,而不是在我手动将值输入到完全相同的命令时。在注册中,在UnitCode“SIT101”中注册了一个StudentID 1。任何想法出了什么问题?

提前致谢。

1 个答案:

答案 0 :(得分:1)

在您的存储过程声明中,您有@unitCode varchar(4),但您尝试插入的值似乎是SIT101

这将被静默地截断为SIT1,这是不存在的 - 因此违反了FK。

增加参数类型的长度以匹配列的长度。