• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 不用企業管理器的情況下得知CHECK約束的屬性設置

    發表于:2007-05-25來源:作者:點擊數: 標簽:企業得知情況下不用Check
    我們知道,在 SQL SERVER企業管理器中,在設計表狀態下,當查看該表的CHECK約束時,會看到CHECK約束有創建中檢查現存數據、對復制強制約束、對INSERT和UPDATE強制約束三個復選框,那么如果不在企業管理器環境下,或者在應用程序中,我們如何得知某個CHECK約

    我們知道,在SQL SERVER企業管理器中,在“設計表”狀態下,當查看該表的CHECK約束時,會看到CHECK約束有“創建中檢查現存數據”、“對復制強制約束”、“對INSERT和UPDATE強制約束”三個復選框,那么如果不在企業管理器環境下,或者在應用程序中,我們如何得知某個CHECK約束的這三個選項是否選中呢?

    我查看了相關系統表的幫助說明,但里面對好多字段的說明都為“保留”、“僅供內部使用”等,沒有字段的作用說明。但我發現當改變三個選項的選中狀態時,sysobjects中相應CHECK約束記錄的status字段值發生改變,為了得知其中是否有規律可循,我做了如下測試并得出一些結論,拿出來共享。

    “創建中檢查現存數據”、“對復制強制約束”、“對INSERT和UPDATE強制約束”三項屬性分別對應000的三位,0為不選,1為選中。

    建立一個測試表,為其建立列級CHECK約束和表級CHECK約束,先令其為空表。
    下面結果中,等號左邊為三個屬性的選中狀態,右邊為sysobjects表中約束記錄的status字
    段值:
    對于列級約束:
    000=3330
    001=3074
    010=2306
    011=2050
    100=3330(保存后仍未選中,不知為何)
    101=3074
    110=2306
    111=2
    發現除111外,其余首位為1均作為0看待。

    對于表級約束:
    000=3328
    001=3072
    010=2304
    011=2048
    100=3328
    101=3072
    110=2304
    111=0
    可發現與列級約束有同樣的問題,同時,對于相同的二進制值,表級約束比列級約束少2。

    但值得注意的是,以上測試是在表中無數據的情況下,故可能引起三位二進制數的最高位無意義。下面測試表中有數據的結果(在測試表中插入了符合各CHECK約束的數據):

    對于列級約束:
    000=3330
    001=3074
    010=2306
    011=2050
    100=3330
    101=3074
    110=2306
    111=2

    對于表級約束:
    000=3328
    001=3072
    010=2304
    011=2048
    100=3328
    101=3072
    110=2304
    111=0

    可見結果完全相同。
    猜測原因是“創建中檢查現存數據”一項只在CHECK約束保存瞬間作用,保存后系統即將其取
    消,故若查看已有的CHECK約束,該選項已無意義,故為不選中狀態。

    但在pubs庫中,發現系統已有的一些CHECK約束的status初始值為6,不知何解?不過修改后與以上結果相符。


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>