2013-04-11 2 views
13

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

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.

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

ответ

18

Это похоже на работу:

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

Имейте в виду, что sev 0 означает информационное сообщение, а не сообщение об ошибке. –

+0

RAISERROR ({msg_id | msg_str | @local_variable} {, severity, state} [, argument [, ... n]]) [WITH option [, ... n]] Дополнительную информацию о различных параметрах можно найти на странице https://docs.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql – Jan

18

На самом деле, RAISERROR устаревшим в пользу THROW, поскольку SQL Server 2012. Перейти here для получения дополнительной информации. Один из самых забавных аспектов заключается в том, что это Rais e rror, а не Rais eE rror, приводящий к тому, что в некоторых кругах он называется «поднимать 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; 
0

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

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

Смежные вопросы