Я не могу использовать THROW SQL Server 2008 R2

17

SQL Server 2008 R2 Management Studio не распознает мой бросок в приведенном ниже примере, он говорит

  

неправильный синтаксис рядом с Throw

Я пытаюсь сделать ошибку здесь, поэтому я могу обработать ее на своем веб-сайте, когда кто-то дважды вставляет то же значение.

Begin Try
 insert into BusinessID (BusinessID) values (@ID)
 insert into BusinessID (BusinessID) values (@ID)

End Try

Begin Catch

Print 'PK already exist'
THROW
End Catch
    
задан user2405574 21.05.2013 в 15:14
источник

2 ответа

36

THROW Заявление введено в SQL Server 2012

Ссылка

Вместо этого вы можете использовать RAISERROR .

Ссылка

BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT 
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();

    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );
END CATCH;
    
ответ дан Nenad Zivkovic 21.05.2013 в 15:17
источник
3

Используйте RAISERROR вместо Throw в своем блоке sql.

Begin Try
 insert into BusinessID (BusinessID) values (@ID)
 insert into BusinessID (BusinessID) values (@ID)

End Try

Begin Catch

Print 'PK already exist'
  DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

SELECT 
    @ErrorMessage = ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE();

-- Use RAISERROR inside the CATCH block to return error
-- information about the original error that caused
-- execution to jump to the CATCH block.
RAISERROR (@ErrorMessage, -- Message text.
           @ErrorSeverity, -- Severity.
           @ErrorState -- State.
           );
End Catch
    
ответ дан Pawan 21.05.2013 в 15:20
источник