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.

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

3 ответов


Это, кажется, работает:

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

на самом деле RAISERROR был осужден в пользу THROW начиная с SQL Server 2012. Go здесь для получения дополнительной информации. Один из самых забавных аспектов заключается в том, что это Raiserror, а не Raisээrror приводит к тому, что в некоторых кругах его называют "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;

--используйте 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, "ошибка и/или текст бизнес-ошибки идет здесь")