当硬编码值时,SQL Server 2005插入null

我有一个存储过程,在表中创build一个entery。

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

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

  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语句不是真的,下一行也会被调用。