SQL Server 2005 在值硬编码时插入空值

SQL Server 2005 在值硬编码时插入空值

我有一个在表中创建条目的存储过程。

INSERT INTO tbl_CaseDetails
        (
            Case_Id
            , Client_Id
            , Client_HO_Id
            , Client_Case_Ref
            , Client_Cust_Ref
            , Access_Id
            , Product_Id
            , Status
        )
        Values(

            @CaseId
            , @Client_Id
            , isnull(@Head_Office_Id,@Client_Id)
            , @Client_Case_Reference
            , @Client_Customer_Reference
            , @Access_Id
            , @Product_Id 
            , 'pre-instr')

但是在触发器中状态显示为空并且插入失败因为我检查了空状态。

  If Update(Status)
        Begin
              If @Status Is Null
        Exec [usp_CaseWithNullStatus] @Case_Id
                 Begin
                       RaisError ( 'Cannot insert null status'
              ,16
              ,16 )
                 End
        End

知道为什么会发生这种情况吗?Sp

答案1

你的内部开始/结束块不应该这样设置吗:

  If Update(Status)
  Begin
      If @Status Is Null
      Begin   -- <---------- block starts here
           Exec [usp_CaseWithNullStatus] @Case_Id
           RaisError ( 'Cannot insert null status'
              ,16
              ,16 )
      End
  End

在您的代码中,raiserror 将是总是被调用,因为 if 语句后面的行被视为执行块,即使 if 语句不成立,下一行也会被调用。

相关内容