我有两张桌子,报名和出席。注册的主要键是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。任何想法出了什么问题?
提前致谢。
答案 0 :(得分:1)
在您的存储过程声明中,您有@unitCode varchar(4)
,但您尝试插入的值似乎是SIT101
。
这将被静默地截断为SIT1
,这是不存在的 - 因此违反了FK。
增加参数类型的长度以匹配列的长度。