none
Output параметры и RAISERROR RRS feed

  • Вопрос

  • Есть ХП с Output параметром. Этому параметру присваивается значение. Затем в ХП вызывается RAISERROR. Если запустить эту хп и передать параметры, то после её выпалнения, параметр пуст. ТО есть RAISERROR очищает значение параметра. Можно ли обойти это?
    2 апреля 2007 г. 5:37

Ответы

  •  Int23 написано:
    Есть ХП с Output параметром. Этому параметру присваивается значение. Затем в ХП вызывается RAISERROR. Если запустить эту хп и передать параметры, то после её выпалнения, параметр пуст. ТО есть RAISERROR очищает значение параметра. Можно ли обойти это?

     

    А как это Вы выходному параметру присваеваете значение при вызове процедуры?

    Может Вам RETURN нужен Wink

    3 апреля 2007 г. 6:10
  • create proc Test @i int output
    as
    set @i=2
    raiserror('error',16,1)
    GO
    declare @j int
    set @j=1
    exec dbo.Test @i=@j output
    select @j

    Возвращает 2

    3 апреля 2007 г. 11:08
  •  Dautov написано:

    create proc Test @i int output
    as
    set @i=2
    raiserror('error',16,1)
    GO
    declare @j int
    set @j=1
    exec dbo.Test @i=@j output
    select @j

    Возвращает 2

     

    USE tempdb

    GO

    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

    -- Если всё совсем уж плохо - UNCOMMITTED

    SET     NOCOUNT -- меньше трафик

    ,QUOTED_IDENTIFIER -- стандартизация кавычек

    ,ANSI_NULLS --стандартизация сравнения с NULL

    ,ANSI_WARNINGS -- вывод ошибок агрегации NULL и деления на 0

    ,ANSI_PADDING -- стандартизация оконечных пробелов и нулей

    ,ARITHABORT -- стандартизация отката транзакций

    ,XACT_ABORT -- стандартизация отката транзакций

    ,CONCAT_NULL_YIELDS_NULL -- сцепление с NULL

    ON;

    SET NUMERIC_ROUNDABORT OFF; -- стандартизация потери точности

    GO

    create proc Test @i int output

    as

    set @i=2

    raiserror('Ошибки на самом деле нету... это мы балуемся Smile',17,1)

    GO

    declare @j int

    set @j=1

    exec tempdb.dbo.Test @i=@j output

    select @j

    DROP PROCEDURE Test

     

    А это ничего не возвращает....

    3 апреля 2007 г. 12:19
  • Все ответы

    •  Int23 написано:
      Есть ХП с Output параметром. Этому параметру присваивается значение. Затем в ХП вызывается RAISERROR. Если запустить эту хп и передать параметры, то после её выпалнения, параметр пуст. ТО есть RAISERROR очищает значение параметра. Можно ли обойти это?

       

      А как это Вы выходному параметру присваеваете значение при вызове процедуры?

      Может Вам RETURN нужен Wink

      3 апреля 2007 г. 6:10
    • create proc Test @i int output
      as
      set @i=2
      raiserror('error',16,1)
      GO
      declare @j int
      set @j=1
      exec dbo.Test @i=@j output
      select @j

      Возвращает 2

      3 апреля 2007 г. 11:08
    •  Dautov написано:

      create proc Test @i int output
      as
      set @i=2
      raiserror('error',16,1)
      GO
      declare @j int
      set @j=1
      exec dbo.Test @i=@j output
      select @j

      Возвращает 2

       

      USE tempdb

      GO

      SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

      -- Если всё совсем уж плохо - UNCOMMITTED

      SET     NOCOUNT -- меньше трафик

      ,QUOTED_IDENTIFIER -- стандартизация кавычек

      ,ANSI_NULLS --стандартизация сравнения с NULL

      ,ANSI_WARNINGS -- вывод ошибок агрегации NULL и деления на 0

      ,ANSI_PADDING -- стандартизация оконечных пробелов и нулей

      ,ARITHABORT -- стандартизация отката транзакций

      ,XACT_ABORT -- стандартизация отката транзакций

      ,CONCAT_NULL_YIELDS_NULL -- сцепление с NULL

      ON;

      SET NUMERIC_ROUNDABORT OFF; -- стандартизация потери точности

      GO

      create proc Test @i int output

      as

      set @i=2

      raiserror('Ошибки на самом деле нету... это мы балуемся Smile',17,1)

      GO

      declare @j int

      set @j=1

      exec tempdb.dbo.Test @i=@j output

      select @j

      DROP PROCEDURE Test

       

      А это ничего не возвращает....

      3 апреля 2007 г. 12:19