微软70-761考试疑问:RAISERROR/THROW生成警告应设何种严重级别?
关于SQL Server中生成警告的RAISERROR/THROW选择及严重级别说明
这个问题在70-761考试里确实是个容易混淆的考点,我来帮你理清楚核心要点:
警告对应的严重级别:SQL Server中,严重级别1-10属于纯信息性/警告类消息,不会中断批处理执行,也不会触发事务回滚;而16是默认的用户定义错误级别,属于错误范畴,会终止当前批处理(未被TRY/CATCH捕获时),甚至可能回滚事务。所以你认为RAISERROR设为级别10更合适的判断完全正确。
RAISERROR的正确用法:要生成符合要求的警告,直接使用RAISERROR指定严重级别10即可,示例代码如下:
RAISERROR('这是符合要求的警告信息', 10, 1) WITH NOWAIT;这里的
WITH NOWAIT可选,作用是让警告信息立即返回给客户端,而不是等到批处理结束后再输出。THROW的局限性:THROW默认严重级别是16,而且它不支持直接指定低于16的严重级别——即使你想手动设置,语法上也不允许。如果非要用THROW模拟警告,只能先在TRY块里抛出错误,再在CATCH块里用RAISERROR转成级别10的警告,但这属于绕弯路,完全没必要,考试里肯定不会考这种复杂场景。
考试考点提示:70-761里会重点考察严重级别的分类,记住:
- 1-10:信息/警告,不中断执行
- 11-16:用户可定义错误,会中断批处理(未捕获时)
- 17-19:资源不足类错误,需要DBA介入
- 20+:致命错误,会终止数据库连接
内容的提问来源于stack exchange,提问作者borkovski
相关产品推荐
相关产品推荐

