Назад | Перейти на главную страницу

SQL Server 2005 вставляет null при жестком кодировании значения

У меня есть хранимая процедура, которая создает запись в таблице.

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

В вашем коде ошибка будет всегда вызывается, потому что строка, следующая за вашим оператором if, считается блоком выполнения, а следующая строка будет вызываться, даже если оператор if неверен.