0
我是SQL和SQL Server的新手。我正在嘗試實施一個小型數據庫。但是,我不斷收到三個錯誤。我不斷收到SQL Server上的錯誤 - 字符串和二進制數據截斷,外鍵約束
錯誤#1:
字符串或二進制數據將被截斷
錯誤#2:
INSERT語句衝突與外鍵約束 「FK__Formation__Locat__25869641」
錯誤#3:
INSERT語句與FOREIGN KEY約束「FK__DATA__Classifica__2B3F6F97」衝突。
我試過了各種不同的改變,似乎沒有任何工作。有人可以向我解釋我做錯了什麼嗎?由於
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');
作爲一般的最佳實踐,您應該始終* *指定所插入的列 - 所以用這個,而不是你現在擁有的一切:'INSERT INTO位置(LocationID,LOCATIONNAME)VALUES ('001','Montana');' –
另外:涉及FK關係*的列的數據類型應該相同* - 您的'Location.LocationID'是'CHAR(5)',但是'Formation.LocationID'引用它是'INT' - 做出決定,爲所有人使用** same **數據類型!而且由於'ID'通常是一個數值 - 使用**數字**數據類型 - INT,BIGINT等。do ** not **將數值存儲爲CHAR(5)! ! –