失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > SQL Server由于主外键约束导致插入失败的记录方法

SQL Server由于主外键约束导致插入失败的记录方法

时间:2019-09-27 19:31:53

相关推荐

SQL Server由于主外键约束导致插入失败的记录方法

数据库|mysql教程

SQL,Server,主外,约束,导致,插入,败记

数据库-mysql教程

网页图片源码下载,vscode图片如何居中,ubuntu 克隆磁盘,tomcat不要闪退,搞爬虫,php 禁用缓存,seo顾问达人引流推广,网站源码都有哪些后门,汽车服务公司简介模板lzw

你打算从 SQL Server 2000 数据库的客户表和国别表中导入客户数据到 SQL Server 数据库中。你要确保在导入过程中,客户表中国家代码列的每个值在 SQL Server 数据库中国别表内都有其相应的纪录。你在两个表之间定义一外键,这样,参照完整性将保证

小猪cms源码 破解,vscode编写php语言,ubuntu 中文拖,Tomcat增加508端口,sqlite安卓管理器,卫生间内小爬虫怎么办,php 表格显示,seo网址设置中文模式,微信网站代码是什么情况,html5好的网站模板下载工具lzw

服务器源码,ubuntu彻底恢复删除,tomcat运行安装在哪,彼岸图库爬虫,php转行web前端,昆明百度seo优化推广联系方式lzw

你打算从 SQL Server 2000 数据库的客户表和国别表中导入客户数据到 SQL Server 数据库中。你要确保在导入过程中,客户表中国家代码列的每个值在 SQL Server 数据库中国别表内都有其相应的纪录。你在两个表之间定义一外键,这样,参照完整性将保证若国家代码值在客户表中存在, 而在国别表中不存在时导入程序失败。 你要确保国别表无记录时导入过程不失败。

.CodeEntity .code_pieces ul.piece_anchor{width:25px;position:absolute;top:25px;left:-30px;z-index:1000;}.CodeEntity .code_pieces ul.piece_anchor li{width:25px;background: #efe;margin-bottom:2px;}.CodeEntity .code_pieces ul.piece_anchor li{border-left:3px #40AA63 solid;border-right:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li:hover{border-right:3px #40AA63 solid;border-left:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li a{color: #333;padding: 3px 10px;}.CodeEntity .code_pieces .jump_to_code{visibility:hidden;position:relative;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code{visibility:visible;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code a{text-decoration:none;}.CodeEntity .code_pieces h2 i{float:right;font-style:normal;font-weight:normal;}.CodeEntity .code_pieces h2 i a{font-size:9pt;background: #FFFFFF;color:#00A;padding: 2px 5px;text-decoration:none;}

--创建Department(deptID,deptName)和UserInfo(userID, userName, sex, loginDate,deptid)--其中deptID,userID是自动增长的,并且是主键。deptid是外键。并且插入测试数据--创建序列CREATE SEQUENCE seq_Dep START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 30;--建表DepartmentCREATE TABLE Department( deptID VARCHAR2(10) PRIMARY KEY, deptName VARCHAR2(20));--插入测试数据INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,人事部);INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,技术部);INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,后勤部);INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,经理部);INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,销售部);INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,服务部);INSERT INTO Department VALUES (D||seq_Dep.NEXTVAL,公关部);COMMIT;--创建序列CREATE SEQUENCE seq_User START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 30;--建表UserInfoCREATE TABLE UserInfo( userID VARCHAR2(10) PRIMARY KEY, userName VARCHAR2(20), sex VARCHAR2(2), loginDate DATE, deptid VARCHAR2(10) REFERENCES Department (deptID));--插入测试数据INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Eric Schmidt,男,12-9月-07,D1);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Larry Page,男,12-10月-07,D3);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Sergey Brin,男,12-11月-07,D5);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,W. M. Coughran, Jr.,男,1-12月-07,D4);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,David C. Drummond,女,12-12月-01,D2);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Alan Eustace,男,12-9月-07,D1);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Jeff Huber,男,12-10月-07,D3);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,George Reyes,男,12-11月-07,D5);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Elliot Schrage,男,1-12月-07,D4);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Tim Armstrong,女,12-12月-01,D2);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Nikesh Arora,女,12-12月-01,D2);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Sukhinder,男,12-9月-07,D1);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Vinton G. Cerf,男,12-10月-07,D3);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,George Reyes,男,12-11月-07,D5);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Dave Girouard,男,1-12月-07,D4);INSERT INTO UserInfo VALUES (U||seq_User.NEXTVAL,Singh Cassidy,女,12-12月-01,D2);COMMIT;--3. 在deptid建立索引CREATE INDEX deptid_index on UserInfo(deptid);--4. 给Department和UserInfo创建同义词,名称分别是dept, sy_userCREATE OR REPLACE SYNONYM dept FOR Department;CREATE OR REPLACE SYNONYM sy_user FOR UserInfo;/*5. 通过同义词dept, user来创建视图,视图要求能查询出“部门名称,部门编号,用户名,性别,注册时间”*/CREATE OR REPLACE VIEW view_dept_user("部门名称","部门编号","用户名","性别","注册时间")AS SELECT d.deptName,d.deptID,u.userName,u.sex,u.loginDate FROM dept d ,sy_user u WHERE d.deptID=u.deptid;--14. 使用Instead Of触发器,往第5题创建的视图中插入数据。SET SERVEROUTPUT ON;INSERT INTO view_dept_user (部门名称,部门编号,用户名,性别,注册时间) VALUES(仓储部,D6,Dejan Perkovic,男,1-1月-08);/*CREATE OR REPLACE VIEW view_dept_user("部门名称","部门编号","用户名","性别","注册时间")AS SELECT d.deptName,d.deptID,u.userName,u.sex,u.loginDate FROM dept d ,sy_user u WHERE d.deptID=u.deptid;*/CREATE OR REPLACE TRIGGER dept_user_insertINSTEAD OF INSERT ON view_dept_userFOR EACH ROWDECLARE CURSOR cur_dept IS SELECT * FROM Department WHERE Department.deptID = :NEW.deptID; CURSOR cur_user IS SELECT * FROM sy_user WHERE sy_user.userName = :NEW.userName; d cur_dept%rowtype; u cur_user%rowtype; did dept.deptID%TYPE; uid sy_user.userID%TYPE;BEGIN OPEN cur_dept; OPEN cur_user; FETCH cur_user INTO u; FETCH cur_dept INTO d;/* 如果插入的数据中部门ID不存在,则将 seq_Dep.NEXTVAL 产生的序号赋值给变量did,执行插入语句新增加一个部门。 */ IF cur_dept%NOTFOUND THEN did := D||seq_Dep.NEXTVAL; INSERT INTO Department(deptID,deptName) VALUES(did,:NEW.deptName); /* 如果插入数据中的员工不存在,则执行插入语句增加一个新员工 */ IF cur_user%NOTFOUND THEN uid := U||seq_User.NEXTVAL; INSERT INTO UserInfo(userID,userName,sex,loginDate,deptid) VALUES(uid,:NEW.userName,:NEW.sex,:NEW.loginDate,did); END IF;IF cur_dept%FOUND THEN/* 如果插入的数据中部门ID是已经存在的部门ID,则更新部门名称 */ did:=:NEW.deptID; UPDATE Department SET Department.deptName WHERE Department.deptID = :NEW.deptID; /* 如果插入数据中的员工不存在,则将seq_User.NEXTVAL 产生的序号赋值给变量uid,执行插入语句增加一个新员工 */ IF cur_user%NOTFOUND THEN uid := U||seq_User.NEXTVAL; INSERT INTO UserInfo VALUES(uid,:NEW.userName,:NEW.sex,:NEW.loginDate,:NEW.deptID); ELSE /* 如果插入数据中的员工已存在,则根据部门ID、员工姓名 来更新员工的其他字段的值,员工ID为主键,不用更新。 考虑到同名员工存在的可能,但员工的ID不可能相同的特点,需要根据插入数据中的部门ID、员工姓名来查询出 符合要求的员工的ID,用员工ID来进行后续的操作 */ SELECT userID INTO uid FROM UserInfo WHERE UserInfo.userName=:NEW.userName AND UserInfo.deptID=did;UPDATE UserInfo SET UserInfo.sex = :NEW.sex,UserInfo.loginDate = :NEW.loginDate,UserInfo.deptID = :NEW.sex WHERE UserInfo.userID=uid AND UserInfo.userName=:NEW.userName; END IF; END IF; CLOSE ecur; CLOSE dcur;END dept_user_insert;/show errors;出现的错误提示:警告: 创建的触发器带有编译错误。SQL> show errors;TRIGGER DEPT_USER_INSERT 出现错误:LINE/COL ERROR-------- -----------------------------------------------------------------3/31 PLS-00049: 错误的赋值变量 NEW.DEPTID5/30 PLS-00049: 错误的赋值变量 NEW.USERNAME20/56 PLS-00049: 错误的赋值变量 NEW.DEPTNAME26/75 PLS-00049: 错误的赋值变量 NEW.USERNAME26/89 PLS-00049: 错误的赋值变量 NEW.SEX26/98 PLS-00049: 错误的赋值变量 NEW.LOGINDATE33/10 PLS-00049: 错误的赋值变量 NEW.DEPTID34/4 PL/SQL: SQL Statement ignored34/46 PL/SQL: ORA-00927: 缺少等号34/72 PLS-00049: 错误的赋值变量 NEW.DEPTID40/37 PLS-00049: 错误的赋值变量 NEW.USERNAMELINE/COL ERROR-------- -----------------------------------------------------------------40/51 PLS-00049: 错误的赋值变量 NEW.SEX40/60 PLS-00049: 错误的赋值变量 NEW.LOGINDATE40/75 PLS-00049: 错误的赋值变量 NEW.DEPTID47/66 PLS-00049: 错误的赋值变量 NEW.USERNAME49/40 PLS-00049: 错误的赋值变量 NEW.SEX49/70 PLS-00049: 错误的赋值变量 NEW.LOGINDATE49/103 PLS-00049: 错误的赋值变量 NEW.SEX50/53 PLS-00049: 错误的赋值变量 NEW.USERNAME55/5 PLS-00103: 出现符号 "DEPT_USER_INSERT"在需要下列之一时: if

如果觉得《SQL Server由于主外键约束导致插入失败的记录方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。