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 не соответствует true.

Другие вопросы по тегам