我一直在数据库脚本中使用RAISEERROR
来记录信息性消息。
DECLARE @totalrows INT = (SELECT COUNT(*) FROM mytable);
DECLARE @fancyrows INT = (SELECT COUNT(*) FROM mytable WHERE fancy = 1);
RAISEERROR ('%i rows out of %i are fancy', 10, 1, @fancyrows, @totalrows) WITH NOWAIT;
-- Do some more things...
使用低于11
的严重性参数意味着它不会停止脚本的执行,但我的同事指出,在读取脚本时,它似乎仍然意味着出现了问题。
是否有更清晰的方法在SQL中记录信息性消息?比如LOGMESSAGE
?
要给这个问题一个答案(基于@Scratte的链接和@Martin Smith的评论):
RAISEERROR
是SQL Server中最强大的日志记录方法有一种PRINT
方法在功能上类似,但在几点上有所欠缺。RAISEERROR
的优点是:
- 本机允许字符串插值
- 可与
WITH NOWAIT
一起使用,从而立即记录其输出。PRINT
使用的消息缓冲区可能会延迟其输出,但情况并非如此