sql-server - SQL 创建和填充
问题描述
任何有经验的人都可以快速浏览以下内容。我还不够聪明,无法解决系统错误。
CREATE TABLE TestSubject (
test_subjectID NCHAR (6) NOT NULL PRIMARY KEY,
subject_name NVARCHAR (10) NOT NULL,
subject_address NVARCHAR (12) NOT NULL,
)
;
CREATE TABLE PhNumber (
subject_id NCHAR (6) NOT NULL,
ph_number NVARCHAR (20) NOT NULL,
PRIMARY KEY (ph_number),
FOREIGN KEY (subject_id) REFERENCES TestSubject (test_subjectID)
);
CREATE TABLE Test (
test_date DATETIME NOT NULL,
subject_id NCHAR (6) NOT NULL,
result NVARCHAR (10),
PRIMARY KEY (test_date),
FOREIGN KEY (subject_id) REFERENCES TestSubject (test_subjectID));
CREATE TABLE Place (
place_name NVARCHAR (10) NOT NULL PRIMARY KEY,
place_address NVARCHAR (8),
place_owner NVARCHAR (8)
);
CREATE TABLE VisitSubject (
v_date DATETIME NOT NULL,
v_number NVARCHAR (20) NOT NULL,
place_visit NVARCHAR (10) NOT NULL,
party_size INT,
PRIMARY KEY (v_date),
FOREIGN KEY (v_number) REFERENCES PhNumber (ph_number),
FOREIGN KEY (place_visit) REFERENCES Place (place_name));
和填充脚本
INSERT INTO TestSubject
VALUES
('S001', 'Daniel Doppler', '5 Beetle Avenue Aberdeen'),
('S002', 'Florence West', '17 Green Crescent Dundee'),
('S003', 'Werner Flick', '25A Grubb Street Stonehaven'),
('S004', 'Tiffany Smith', '11 Green Crescent Dundee'),
('S005', 'Angela Ashe', '113 Wasp Street Aberdeen');
INSERT INTO Test
VALUES
('2020/08/05 00:00:00', 'S001', 'Negative'),
('2020/08/10 00:00:00', 'S002', 'Positive'),
('2020/08/17 00:00:00', 'S003', 'Negative'),
('2020/08/22 00:00:00', 'S004', 'Negative'),
('2020/08/22 00:00:00', 'S005', 'Negative'),
('2020/09/03 00:00:00', 'S001', 'Positive');
INSERT INTO PhNumber
VALUES
('S001', '07123-123456'),
('S002', '07777-111000'),
('S003', '07555-246810'),
('S004', '07101-484848'),
('S004', '07896-102304'),
('S005', '07777-534242');
INSERT INTO Place
VALUES
('Pink Lion Inn', 'Forfar', 'Sean Conran'),
('Irenes Hair Salon', 'Stonehaven', 'Irene Jones');
INSERT INTO VisitSubject
VALUES
('2020/08/01 00:00:00', '07123-123456', 'Irenes Hair Salon', '1'),
('2020/08/01 00:00:00', '07777-111000', 'Irenes Hair Salon', '2'),
('2020/08/25 00:00:00', '07123-123456', 'Pink Lion Inn', '4'),
('2020/08/25 00:00:00', '07493-285113', 'Pink Lion Inn', '2'),
('2020/09/10 00:00:00', '07555-246810', 'Irenes Hair Salon', '1'),
('2020/09/15 00:00:00', '07555-246810', 'Pink Lion Inn', '3');
由于 2 个错误,我无法填充现有表 -
字符串或二进制数据将被截断
和
INSERT 语句与 FOREIGN KEY 约束“FK__Test__subject_id__286302EC”冲突。冲突发生在数据库“TAT_2012552”、表“dbo.TestSubject”、列“test_subjectID”中。
INSERT 语句与 FOREIGN KEY 约束“FK__PhNumber__subjec__25869641”冲突。冲突发生在数据库“TAT_2012552”、表“dbo.TestSubject”、列“test_subjectID”中。
解决方案
第一个错误意味着您试图在数据类型长度小于该值的列中插入一个值。例如,在您的VisitSubject
表中,该place_visit
列可以接受不超过 10 个字符的字符串。例如,在您的情况下,无法插入值Irenes Hair Salon ,因为它超过 10 个字符。
第二个错误被抛出,因为subject_id
值插入到您的表中Test
,并且在表PhNumber
中不存在TestSubject
。为什么它不存在于您的表中TestSubject
?因为 SQL 无法在此表中插入任何行,因为插入subject_name
的subject_address
值具有比表中定义的数据类型长度更多的字符。
请先解决插入值比数据类型定义长的问题,然后它应该解决您的外键问题。
推荐阅读
- java - 收到此错误 java.lang.IndexOutOfBoundsException: Index 487 out of bounds for length 487
- mysql - 导入 wordpress 站点 #1062 - 键 'PRIMARY' 的重复条目 '7'
- python - 使用 tf.function 装饰自定义损失完全改变了训练结果,无论是在 keras model.fit 方法还是自定义训练循环中
- angular - NgRx 选择器 - 冷或热可观察
- javascript - 防止重复的电子邮件 Google 电子表格脚本
- angular - 以角度形式动态添加键/值对
- javascript - Javascript devtool VM 实例查找启动器
- php - PHP - 以时间间隔计算过去 15 天的元素
- mysql - mysql定界和搜索列数据
- java - 使用 jsch 和公钥连接 sftp