• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    SQLServer由于主外鍵約束導致插入失敗的記錄方法

    來源:懂視網 責編:小采 時間:2020-11-09 16:16:20
    文檔

    SQLServer由于主外鍵約束導致插入失敗的記錄方法

    SQLServer由于主外鍵約束導致插入失敗的記錄方法:你打算從 SQL Server 2000 數據庫的客戶表和國別表中導入客戶數據到 SQL Server 2005 數據庫中。你要確保在導入過程中,客戶表中國家代碼列的每個值在 SQL Server 2005 數據庫中國別表內都有其相應的紀錄。你在兩個表之間定義一外鍵,這樣,參照完整性將保證
    推薦度:
    導讀SQLServer由于主外鍵約束導致插入失敗的記錄方法:你打算從 SQL Server 2000 數據庫的客戶表和國別表中導入客戶數據到 SQL Server 2005 數據庫中。你要確保在導入過程中,客戶表中國家代碼列的每個值在 SQL Server 2005 數據庫中國別表內都有其相應的紀錄。你在兩個表之間定義一外鍵,這樣,參照完整性將保證

    你打算從 SQL Server 2000 數據庫的客戶表和國別表中導入客戶數據到 SQL Server 2005 數據庫中。你要確保在導入過程中,客戶表中國家代碼列的每個值在 SQL Server 2005 數據庫中國別表內都有其相應的紀錄。你在兩個表之間定義一外鍵,這樣,參照完整性將保證

    你打算從 SQL Server 2000 數據庫的客戶表和國別表中導入客戶數據到 SQL Server 2005 數據庫中。你要確保在導入過程中,客戶表中國家代碼列的每個值在 SQL Server 2005 數據庫中國別表內都有其相應的紀錄。你在兩個表之間定義一外鍵,這樣,參照完整性將保證若國家代碼值在客戶表中存在, 而在國別表中不存在時導入程序失敗。 你要確保國別表無記錄時導入過程不失敗。 <無> $velocityCount-->
    --創建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;
    --建表Department
    CREATE 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;
    --建表UserInfo
    CREATE 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_user
    CREATE 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_insert
    INSTEAD OF INSERT ON view_dept_user
    FOR EACH ROW
    DECLARE
     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.DEPTID'
    5/30 PLS-00049: 錯誤的賦值變量 'NEW.USERNAME'
    20/56 PLS-00049: 錯誤的賦值變量 'NEW.DEPTNAME'
    26/75 PLS-00049: 錯誤的賦值變量 'NEW.USERNAME'
    26/89 PLS-00049: 錯誤的賦值變量 'NEW.SEX'
    26/98 PLS-00049: 錯誤的賦值變量 'NEW.LOGINDATE'
    33/10 PLS-00049: 錯誤的賦值變量 'NEW.DEPTID'
    34/4 PL/SQL: SQL Statement ignored
    34/46 PL/SQL: ORA-00927: 缺少等號
    34/72 PLS-00049: 錯誤的賦值變量 'NEW.DEPTID'
    40/37 PLS-00049: 錯誤的賦值變量 'NEW.USERNAME'
    
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    40/51 PLS-00049: 錯誤的賦值變量 'NEW.SEX'
    40/60 PLS-00049: 錯誤的賦值變量 'NEW.LOGINDATE'
    40/75 PLS-00049: 錯誤的賦值變量 'NEW.DEPTID'
    47/66 PLS-00049: 錯誤的賦值變量 'NEW.USERNAME'
    49/40 PLS-00049: 錯誤的賦值變量 'NEW.SEX'
    49/70 PLS-00049: 錯誤的賦值變量 'NEW.LOGINDATE'
    49/103 PLS-00049: 錯誤的賦值變量 'NEW.SEX'
    50/53 PLS-00049: 錯誤的賦值變量 'NEW.USERNAME'
    55/5 PLS-00103: 出現符號 "DEPT_USER_INSERT"在需要下列之一時:
     if
    

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    SQLServer由于主外鍵約束導致插入失敗的記錄方法

    SQLServer由于主外鍵約束導致插入失敗的記錄方法:你打算從 SQL Server 2000 數據庫的客戶表和國別表中導入客戶數據到 SQL Server 2005 數據庫中。你要確保在導入過程中,客戶表中國家代碼列的每個值在 SQL Server 2005 數據庫中國別表內都有其相應的紀錄。你在兩個表之間定義一外鍵,這樣,參照完整性將保證
    推薦度:
    標簽: 記錄 失敗 sql
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久国产精品久久| 国产精品欧美一区二区三区| 亚洲无删减国产精品一区| 日韩精品无码Av一区二区| jizzjizz国产精品久久| 久久91这里精品国产2020| 久久99精品综合国产首页| 日韩AV无码精品人妻系列| 久久久久99精品成人片三人毛片 | 国产第一福利精品导航| 亚洲欧美精品午睡沙发| 国内精品视频九九九九| 久久久精品午夜免费不卡| 精品久久久噜噜噜久久久 | 国产精品高清一区二区三区不卡| 亚洲色精品88色婷婷七月丁香| 久久996热精品xxxx| 国产成人亚洲精品91专区手机| 国产精品宾馆在线精品酒店| 久久国产精品99精品国产| 中文字幕乱码中文乱码51精品| 日韩人妻无码精品无码中文字幕| 久久99精品国产麻豆婷婷| 国产精品成人99久久久久| 88国产精品无码一区二区三区 | 久久99精品久久久久久齐齐| 国产成人精品免费视频大全| 欧美国产亚洲精品高清不卡| AV无码精品一区二区三区| 精品国产sm捆绑最大网免费站| 无码精品一区二区三区在线| 中国精品18videosex性中国| 亚洲精品专区在线观看| 亚洲精品国产精品乱码不卡 | 巨大黑人极品VIDEOS精品| 久久精品国产第一区二区| 国产内地精品毛片视频| 国产亚洲精品a在线观看| 国产一区精品| 欧美亚洲另类精品第一页 | 亚洲精品成人区在线观看|