2013-04-11 47 views
13

Trong các phiên bản trước đó, chúng tôi đưa ra sai sót trong t-sql như:RaiseError trong SQL Server

RAISERROR 50000 'My Error Message' 

Trong SQL Server mới nhất cú pháp này đã hết hiệu lực và thay thế bằng cú pháp RaiseError().

Tôi muốn có một phương pháp chung của việc nâng cao sai sót, và tốt nhất mà tôi có thể đưa ra cho đến nay là:

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

Nhưng tôi không thể đi và tạo ra một thông báo lỗi với sp_addmessage cho mỗi tin nhắn , bởi vì có 1000.

Cách tốt hơn để nâng cao tin nhắn bằng tin nhắn tùy chỉnh là gì?

Trả lời

18

Điều này dường như làm việc:

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

Hãy nhớ rằng sev 0 có nghĩa là thông báo thông tin chứ không phải lỗi. –

+0

RAISERROR ({msg_id | msg_str | @local_variable} {, mức độ nghiêm trọng, trạng thái} [, đối số [, ... n]]) [VỚI tùy chọn [, ... n]] Bạn có thể tìm thêm thông tin về các thông số khác nhau tại https://docs.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql – Jan

18

Trên thực tế, RAISERROR đã phản đối ủng hộ THROW từ SQL Server 2012. Go here để biết thêm thông tin. Một trong những khía cạnh thú vị hơn là Rais e rror và không phải là Rais eE rror dẫn đến nó được gọi là "tăng tỷ lệ" trong một số vòng kết nối.

mẫu từ 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

--Sử dụng các s% thẻ hoang dã để bạn có thể vượt qua trong bất kỳ thông điệp mà bạn muốn từ bất kỳ procs lưu trữ của bạn:
if Not Exists (Select * from SysMessages where error = 62000) EXEC sp_addmessage @msgnum = 62000, @severity = 16, @msgtext = N'%s', @lang = 'us_english'

--Then trong sp của bạn, bạn có thể nâng cao lỗi này:
RAISERROR (62000,16,1, 'Lỗi và/hoặc văn bản lỗi doanh nghiệp đi tại đây')