创建TblPeminjaman表时出现约束/索引创建失败错误(Msg 1753、Msg 1750)求助
解决SQL外键约束创建错误(Msg 1753 & Msg 1750)
看起来你这两个错误都是外键配置出了问题,我帮你拆解并修正:
错误根源分析
- Msg 1753(字段长度不匹配):你把
NIM字段(定义为varchar(9))的外键关联到了当前表的KodePeminjaman(varchar(4)),SQL Server要求外键和它引用的字段必须有完全一致的数据类型、长度和精度,这种长度差异直接触发了报错。 - Msg 1750(约束创建失败):这是第一个错误引发的连锁反应——因为外键配置本身存在逻辑问题,所以整个约束无法被创建。
- 最核心的逻辑错误:你的外键引用方向完全错了!
KodeBuku应该关联到书籍表(比如TblBuku)的KodeBuku字段,NIM应该关联到学生表(比如TblMahasiswa)的NIM字段,而不是都指向当前的借阅表。
修正后的SQL代码
首先是修正后的建表语句(假设你已经创建了TblBuku和TblMahasiswa这两个基础表,且它们的KodeBuku为varchar(4)、NIM为varchar(9)):
CREATE TABLE TblPeminjaman ( KodePeminjaman varchar(4) PRIMARY KEY, KodeBuku varchar(4) NOT NULL, NIM varchar(9) NOT NULL, TglPinjam Date NOT NULL, TglKembali Date NOT NULL, Status varchar(10) NOT NULL CHECK (Status IN ('Kembali', 'Pinjam')), -- 正确配置外键关联到对应的基础表 FOREIGN KEY (KodeBuku) REFERENCES TblBuku (KodeBuku), FOREIGN KEY (NIM) REFERENCES TblMahasiswa (NIM) );
然后是插入语句,注意NIM是字符串类型,值需要加单引号,同时日期用标准的YYYY-MM-DD格式避免解析问题:
INSERT INTO dbo.TblPeminjaman (KodePeminjaman, KodeBuku, NIM, TglPinjam, TglKembali, Status) VALUES ('P002', 'BU04', '182112222', '2021-03-17', '2021-03-23', 'Pinjam')
额外注意事项
- 确保
TblBuku和TblMahasiswa已经提前创建,并且它们的对应字段(KodeBuku、NIM)的数据类型和长度和TblPeminjaman中的完全一致。 - 日期格式尽量使用
YYYY-MM-DD,这是SQL Server的标准日期格式,不会因为数据库的区域设置出现解析错误。 - 插入字符串类型的字段时,一定要记得加单引号,否则会被当作数字处理,可能引发隐式转换或类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Yourname
相关产品推荐
相关产品推荐

