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