Подтвердить что ты не робот

RaiseError в SQL Server

В предыдущих версиях мы подняли ошибки в t-sql, например:

RAISERROR 50000 'My Error Message'

В последнем SQL Server этот синтаксис был отменен и заменен синтаксисом RaiseError().

Я хотел бы иметь общий метод повышения ошибок, и самое лучшее, что я мог придумать до сих пор:

sp_addmessage @msgnum = 50001,
              @severity = 10,
              @msgtext = N'My Error Message', @replace = 'REPLACE';
RAISERROR (50001, 10, 1, 'This error message is not displayed')

Но я не могу пойти и создать сообщение об ошибке с sp_addmessage для каждого сообщения, потому что есть 1000.

Каков лучший способ поднять сообщения с помощью специального сообщения?

4b9b3361

Ответ 1

Это работает:

RAISERROR('My Error Message',0,1)

Ответ 2

Фактически, RAISERROR устарел в пользу THROW, так как SQL Server 2012. Перейти к здесь для получения дополнительной информации. Один из самых забавных аспектов - это Raiserror, а не Rais eE, что приводит к тому, что в некоторых кругах он называется "raise ror".

Образец из BOL:

USE tempdb;
GO
CREATE TABLE dbo.TestRethrow
(    ID INT PRIMARY KEY
);
BEGIN TRY
    INSERT dbo.TestRethrow(ID) VALUES(1);
--  Force error 2627, Violation of PRIMARY KEY constraint to be raised.
    INSERT dbo.TestRethrow(ID) VALUES(1);
END TRY
BEGIN CATCH

    PRINT 'In catch block.';
    THROW;
END CATCH;

Ответ 3

- Используйте s% wild card, чтобы вы могли передать любое сообщение из любого из ваших сохраненных процессов:
if Not Exists (Select * from SysMessages where error = 62000) EXEC sp_addmessage @msgnum = 62000, @severity = 16, @msgtext = N'%s', @lang = 'us_english'

- Тогда в вашем sp вы можете поднять эту ошибку:
  RAISERROR (62000,16,1, "Текст ошибки ошибки и/или деловой ошибки" )