熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

在可以為空的外鍵中檢查數據的有效性

2013-11-11 21:45:00  來源: Windows系統管理 

  如果由兩個列共同組成主鍵而且一個子表將主鍵作為可為空值的外鍵來繼承就可能得到錯誤的數據可在一個外鍵列中插入有效的值但在另一個外鍵列中插入空值然後可添加一個數據表檢查約束在可為空的外鍵中檢查數據的有效性
  
  任何多列外鍵都可能遇到同樣的問題所以你需要添加一個檢查約束來檢測異常最初檢查約束將檢查構成外鍵的所有列中可能為空的值檢查約束還要檢查這些列中不能為空的值如兩個檢查都通過問題就解決了
  
  以下示范腳本展示了這樣的一個異常以及如何用檢查約束來糾正它
  
  
   SET NOCOUNT ONGOCREATE TABLE parent (pkey INT IDENTITY NOT NULL pkey INT
  NOT NULL col INT NULLCONSTRAINT pk_parent PRIMARY KEY NONCLUSTERED ( pkey pkey))GOINSERT parent (pkey) VALUES ( )INSERT parent (pkey) VALUES ( )INSERT parent (pkey) VALUES ( )INSERT parent (pkey) VALUES ( )GOSELECT * FROM parentGOCREATE TABLE child (cpkey INT IDENTITY NOT NULLCONSTRAINT pk_child PRIMARY KEY NONCLUSTERED (cpkey)pkey INT NULL pkey INT NULL col INT NULLCONSTRAINT fk_parent_child FOREIGN KEY (pkey pkey)REFERENCES parent (pkey pkey))GOINSERT child (pkey pkey) VALUES ( null )GOSELECT * FROM childGODELETE childGOALTER TABLE child WITH NOCHECKADD CONSTRAINT ck_fk_parent_child CHECK((pkey IS NOT NULL AND pkey IS NOT NULL) OR(pkey IS NULL AND pkey IS NULL) )GOINSERT child (pkey pkey) VALUES ( null )GODROP TABLE child parentGO
  
  
  空值是所有數據庫開發者和管理員都要遇到的所以要想開發成功的應用程序必須知道如何處理這些值本文和你分享了空值處理的一些技巧和技術
From:http://tw.wingwit.com/Article/os/xtgl/201311/9134.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.