PRINT vs RAISERROR

1 phút để đọc
Bởi BGạo

Để ghi lại thông tin khi chạy 1 đoạn script trong SQL server - vì mục đích debug hoặc log, chúng ta thường sử dụng PRINT, có một phương án thay thế thường ít được dùng hơn, và được dùng nhiều trong xử lý lỗi, đó là RAISERROR, mình nghĩ lý do nhiều vì cách đặt tên.

Hãy cùng so sánh 2 đoạn code sau để thấy sự khác biệt:

declare @i int = 1
while @i < 100
begin
	print @i
    waitfor delay '00:00:01'
    set @i=@i+1
end

code 1

declare @i int = 1
while @i < 100
begin
	raiserror ('%d',0,1, @i) with nowait
    waitfor delay '00:00:01'
    set @i=@i+1
end

code 2

Khi run đoạn code 1 bạn sẽ thấy messages in ra theo batch và đoạn code 2 messages sẽ in theo thời gian thực. Nếu bạn cần debug theo thời gian thực hoặc cần theo dõi sát sao script khi nó đang chạy, RAISERROR ... WITH NOWAIT có lẽ là sự lựa chọn tốt hơn, còn nếu bạn chỉ muốn xem lại log sau khi script chạy xong, PRINT sẽ đơn giản và tiện dụng hơn.

Ngoài ra, đúng theo cái tên RAISERROR, lệnh này còn dùng cho mục đích catch lỗi hoặc tự định nghĩa lỗi và trả về cho Stored procedure/script đã gọi nó, thường dùng với cấu trúc TRY...CATCH.

Vietnam DBA Community


Theo dõi