2009-07-15 9 views
20

Có vấn đề nhỏ và tự hỏi liệu tôi có sử dụng đúng cách không.TRY và RAISERROR trong T-SQL

Trong kịch bản SQL của tôi là có

BEGIN TRY 
    // check some information and if there are certains errors 
    RAISERROR ('Errors found, please fix these errors and retry', 1, 2) WITH SETERROR 

    // Complete normal process if no errors encountered above 
    PRINT 'IMPORT SUCCEEDED' 
END TRY 
BEGIN CATCH 
    PRINT 'IMPORT ABORTED. ERRORS ENCOUNTERED' 
END CATCH 

Tuy nhiên, điều này là gặp phải một lỗi và sau đó tiếp tục với phần còn lại của kịch bản. Tôi đang thiếu gì? Cảm ơn!

+1

@ FailBoy - Vấn đề mà bạn đã được hỏi về thực sự T-SQL cụ thể. Nếu bạn có thể thay đổi tiêu đề câu trả lời thành "TRY và RAISERROR trong T-SQL" thì điều này sẽ rõ ràng hơn đối với cộng đồng. Cảm ơn! –

+0

Tôi sẽ ghi nhớ điều đó trong lần sau, tôi thấy ai đó, tôi nghĩ bạn, đã thay đổi thẻ thành tsql :) – StevenMcD

+0

@ FailBoy - Tôi muốn thay đổi tiêu đề *. Tôi không thể thay đổi tiêu đề, vì tôi không có quyền chỉnh sửa riêng tư. –

Trả lời

35

Nó bởi vì mức độ nghiêm trọng của RAISERROR không đủ cao, cần phải được giữa 11 và 19, như mô tả here

ví dụ

RAISERROR ('Errors found, please fix these errors and retry', 16, 2) WITH SETERROR 
12

Tôi nghĩ bạn cần phải báo lỗi với mức độ nghiêm trọng cao hơn 10 để bị bắt, ví dụ:

RAISERROR ('Errors found', 11, 2) WITH SETERROR 
+1

Cảm ơn câu trả lời! Tôi đã đánh dấu câu trả lời của AdaTheDev là chính xác vì anh ấy đã đưa liên kết cho những người khác để có thể theo dõi. Nhưng cảm ơn vẫn còn. UpVote +1 – StevenMcD

5

Từ MSDN


mức độ nghiêm trọng

là mức độ nghiêm trọng do người dùng định nghĩa liên quan đến thông báo này. Mức độ nghiêm trọng từ 0 đến 18 có thể được sử dụng bởi bất kỳ người dùng nào. Mức độ nghiêm trọng từ 19 đến 25 chỉ được sử dụng bởi các thành viên của vai trò máy chủ cố định sysadmin. Đối với mức độ nghiêm trọng từ 19 đến 25, tùy chọn WITH LOG là bắt buộc.

Thận trọng mức Mức độ nghiêm trọng từ 20 đến 25 được coi là gây tử vong. Nếu gặp phải mức độ nghiêm trọng gây tử vong, kết nối máy khách bị chấm dứt sau khi nhận được thông báo và lỗi được ghi vào nhật ký lỗi và nhật ký ứng dụng.


Hãy thử điều này thay vì:

RAISERROR ('Errors found, please fix these errors and retry', 1, 2) WITH SETERROR 
RETURN