某些行的SQL Server表检查逻辑失败

某些行的SQL Server表检查逻辑失败,sql,sql-server,Sql,Sql Server,我有一个包含5列的SQL Server表 KeyInstn, KeyFndg, KeyIndex, KeyGeographyTree, KeyDevelopmentEntityRole 我试图实现的是通过应用SQL Server表检查仅允许以下行: 当仅填充KeyGeographyTree时,则KeyInstn、KeyFndg、KeyIndex必须为空,并且KeyDevelopmentEnityRole必须等于12 填充KeyInstn时,可以填充KeyGeographyTree,但其他两列K

我有一个包含5列的SQL Server表

KeyInstn, KeyFndg, KeyIndex, KeyGeographyTree, KeyDevelopmentEntityRole
我试图实现的是通过应用SQL Server表检查仅允许以下行:

  • 当仅填充
    KeyGeographyTree
    时,则
    KeyInstn、KeyFndg、KeyIndex
    必须为空,并且
    KeyDevelopmentEnityRole
    必须等于12

  • 填充
    KeyInstn
    时,可以填充
    KeyGeographyTree
    ,但其他两列
    KeyIndex,KeyFndg
    必须为空

  • 其他两种组合,即当填充
    KeyIndex
    KeyGeographyTree
    时,则
    KeyInstn和KeyFndg
    必须为空,或者当填充
    KeyFndg
    KeyGeographyTree
    时,则
    KeyInstn
    KeyIndex
    必须为空

  • 换句话说,可以同时填充任何列
    KeyInstn、KeyFndg、KeyIndex
    ,但是
    KeyGeographyTree
    可以单独填充,也可以与其他3列中的任何一列组合填充

    这是我写的表格检查,我正在调整它:

    ISNUMERIC(KeyInstn) + ISNUMERIC(KeyFndg) + ISNUMERIC(KeyIndex) = 1 
    OR (KeyGeographyTree IS NOT NULL AND KeyDevelopmentEntityRole = 12))
    
    以下情况不应通过,因为目前正在通过

  • KeyInstn=123、KeyGeographyTree=999和KeyDevelopmentEntityRole=12
  • KeyInstn=123,KeyGeographyTree=NULL,KeyDevelopmentEntityRole=12

  • 下表检查满足所有情况:

    (ISNUMERIC(KeyInstn)+ISNUMERIC(KeyFndg)+ISNUMERIC(keyindg)=1
    和KeyDevelopmentEntityRole 12)或(ISNUMERIC(KeyInstn)+ISNUMERIC(KeyFndg)
    +ISNUMERIC(KeyIndex)=0和ISNUMERIC(KeyGeographyTree)=1
    和KeyDevelopmentEntityRole=12)