我在SQL Server上不断遇到错误-字符串&;二进制数据截断,外键约束
我不熟悉SQL和SQL Server。我正在尝试实现一个小型数据库。然而,我一直有三个错误 错误#1: 字符串或二进制数据将被截断 错误#2: INSERT语句与外键约束“FK__Formation__Locat__25869641”冲突 错误#3: INSERT语句与外键约束“FK__DATA__Classifica__2B3F6F97”冲突 我尝试了各种不同的改变,但似乎没有任何效果。有人能解释一下我做错了什么吗?谢谢我在SQL Server上不断遇到错误-字符串&;二进制数据截断,外键约束,sql,sql-server,tsql,foreign-keys,Sql,Sql Server,Tsql,Foreign Keys,我不熟悉SQL和SQL Server。我正在尝试实现一个小型数据库。然而,我一直有三个错误 错误#1: 字符串或二进制数据将被截断 错误#2: INSERT语句与外键约束“FK__Formation__Locat__25869641”冲突 错误#3: INSERT语句与外键约束“FK__DATA__Classifica__2B3F6F97”冲突 我尝试了各种不同的改变,但似乎没有任何效果。有人能解释一下我做错了什么吗?谢谢 CREATE TABLE Location ( Locatio
CREATE TABLE Location
(
LocationID CHAR(5) NOT NULL,
LocationName VARCHAR(75) NOT NULL,
PRIMARY KEY (LocationID)
);
CREATE TABLE Formation
(
FormationID CHAR(5) NOT NULL,
FormationName VARCHAR(75) NOT NULL,
RockType VARCHAR(75) NOT NULL,
LocationID INT NOT NULL,
PRIMARY KEY (FormationID),
FOREIGN KEY (LocationID) REFERENCES Location(LocationID)
);
CREATE TABLE Classification
(
ClassificationID CHAR(5) NOT NULL,
ClassificationType VARCHAR(75) NOT NULL,
ClassificationDescription VARCHAR(75) NOT NULL,
FormationID VARCHAR(5) NOT NULL,
PRIMARY KEY (ClassificationID),
FOREIGN KEY (FormationID) REFERENCES Formation(FormationID)
);
CREATE TABLE DATA
(
FossilID CHAR(5) NOT NULL,
FossilName VARCHAR(75) NOT NULL,
FossilType VARCHAR(75) NOT NULL,
CatalogueDate DATE NOT NULL,
ClassificationID VARCHAR(5) NOT NULL,
PRIMARY KEY (FossilID),
FOREIGN KEY (ClassificationID) REFERENCES Classification(ClassificationID)
);
INSERT INTO Location
VALUES ('001', 'Montana');
INSERT INTO Formation
VALUES ('R01', 'Hell Creek Formation', 'Cretaceous', 001);
INSERT INTO Classification
VALUES ('001', 'Saurischia', 'Brachiosauridae', 'Hell Creek Formation');
INSERT INTO DATA
VALUES ('F01', 'Brachiosaurus', 'Vertebrae', '01/MAY/2017', '001');
INT
VARCHAR(5)
CHAR(5)
。列的类型应相同:
CREATE TABLE Location (
LocationID CHAR(5) NOT NULL,
LocationName VARCHAR(75) NOT NULL,
PRIMARY KEY (LocationID)
);
CREATE TABLE Formation (
FormationID CHAR(5) NOT NULL,
FormationName VARCHAR(75) NOT NULL,
RockType VARCHAR(75) NOT NULL,
LocationID CHAR(5) NOT NULL, -- here
PRIMARY KEY (FormationID),
FOREIGN KEY (LocationID) REFERENCES Location(LocationID)
);
CREATE TABLE Classification (
ClassificationID CHAR(5) NOT NULL,
ClassificationType VARCHAR(75) NOT NULL,
ClassificationDescription VARCHAR(75) NOT NULL,
FormationID CHAR(5) NOT NULL, -- here
PRIMARY KEY (ClassificationID),
FOREIGN KEY (FormationID) REFERENCES Formation(FormationID)
);
CREATE TABLE DATA (
FossilID CHAR(5) NOT NULL,
FossilName VARCHAR(75) NOT NULL,
FossilType VARCHAR(75) NOT NULL,
CatalogueDate DATE NOT NULL,
ClassificationID CHAR(5) NOT NULL,
PRIMARY KEY (FossilID),
FOREIGN KEY (ClassificationID) REFERENCES Classification(ClassificationID)
);
以及您的insert语句:
INSERT INTO Location VALUES ('001', 'Montana');
INSERT INTO Formation VALUES ('R01', 'Hell Creek Formation', 'Cretaceous', '001'); --corrected
INSERT INTO Classification VALUES ('001', 'Saurischia', 'Brachiosauridae', 'R01'); --corrected
INSERT INTO DATA VALUES ('F01', 'Brachiosaurus', 'Vertebrae', '01/MAY/2017', '001');
截断错误'Hell Creek Formation'
无法容纳字符(5)
。你需要参考PK。同时考虑使用:
INSERT INTO tab(col_name1, col_name2, ...)
VALUES(...)
INT
VARCHAR(5)
CHAR(5)
。列的类型应相同:
CREATE TABLE Location (
LocationID CHAR(5) NOT NULL,
LocationName VARCHAR(75) NOT NULL,
PRIMARY KEY (LocationID)
);
CREATE TABLE Formation (
FormationID CHAR(5) NOT NULL,
FormationName VARCHAR(75) NOT NULL,
RockType VARCHAR(75) NOT NULL,
LocationID CHAR(5) NOT NULL, -- here
PRIMARY KEY (FormationID),
FOREIGN KEY (LocationID) REFERENCES Location(LocationID)
);
CREATE TABLE Classification (
ClassificationID CHAR(5) NOT NULL,
ClassificationType VARCHAR(75) NOT NULL,
ClassificationDescription VARCHAR(75) NOT NULL,
FormationID CHAR(5) NOT NULL, -- here
PRIMARY KEY (ClassificationID),
FOREIGN KEY (FormationID) REFERENCES Formation(FormationID)
);
CREATE TABLE DATA (
FossilID CHAR(5) NOT NULL,
FossilName VARCHAR(75) NOT NULL,
FossilType VARCHAR(75) NOT NULL,
CatalogueDate DATE NOT NULL,
ClassificationID CHAR(5) NOT NULL,
PRIMARY KEY (FossilID),
FOREIGN KEY (ClassificationID) REFERENCES Classification(ClassificationID)
);
以及您的insert语句:
INSERT INTO Location VALUES ('001', 'Montana');
INSERT INTO Formation VALUES ('R01', 'Hell Creek Formation', 'Cretaceous', '001'); --corrected
INSERT INTO Classification VALUES ('001', 'Saurischia', 'Brachiosauridae', 'R01'); --corrected
INSERT INTO DATA VALUES ('F01', 'Brachiosaurus', 'Vertebrae', '01/MAY/2017', '001');
截断错误'Hell Creek Formation'
无法容纳字符(5)
。你需要参考PK。同时考虑使用:
INSERT INTO tab(col_name1, col_name2, ...)
VALUES(...)
作为一般最佳实践,您应该始终指定要插入的列-因此使用它而不是现在的:
INSERT-into-Location(LocationID,LocationName)值('001','Montana')
另外:FK关系中涉及的列的数据类型应该相同-您的位置。LocationID
是CHAR(5)
,但是格式。LocationID
引用它的是INT
-下定决心,对所有列使用相同的数据类型!由于ID
通常是数值-使用数值数据类型-INT
,BIGINT
等-不要将数值存储为CHAR(5)
!!作为一般最佳实践,您应该始终指定要插入的列-因此使用它而不是现在的:INSERT-into-Location(LocationID,LocationName)值('001','Montana')
另外:FK关系中涉及的列的数据类型应该相同-您的位置。LocationID
是CHAR(5)
,但是格式。LocationID
引用它的是INT
-下定决心,对所有列使用相同的数据类型!由于ID
通常是数值-使用数值数据类型-INT
,BIGINT
等-不要将数值存储为CHAR(5)
!!