如何在SQL Server中显示自定义错误消息?验证删除场景代码可行性
你的实现方式不可行,问题出在这几点
首先,你写的IF [dbo].[COA].ID <> 200001这个条件是完全无效的——SQL Server没办法直接在IF语句里引用表的列,因为没有指定行上下文,它根本不知道你要对比哪一行的ID。而且就算ID 200001不存在,DELETE执行后这条IF判断也没法正确触发,因为它的逻辑本身就不对。
正确的做法是检查DELETE语句的影响行数,因为当目标ID不存在时,DELETE不会修改任何数据,影响行数为0。你可以用@@ROWCOUNT这个系统函数来获取上一条语句的影响行数,然后根据这个值来判断是否输出自定义消息:
DELETE FROM [dbo].[COA] WHERE ID = 200001; -- 检查上一条DELETE语句是否影响了行 IF @@ROWCOUNT = 0 BEGIN PRINT N'ID不存在'; END
简单解释一下:
@@ROWCOUNT会返回最近一次执行的DML语句(这里就是DELETE)所影响的行数- 如果目标ID不存在,DELETE找不到匹配的记录,
@@ROWCOUNT就会是0,这时候就会执行PRINT语句输出你的自定义消息
如果你的表可能有非常大的行数,也可以用ROWCOUNT_BIG()代替@@ROWCOUNT(后者是int类型,前者支持bigint),逻辑是完全一样的。
另外,如果你需要更正式的错误提示(比如供应用程序捕获),也可以用THROW或者RAISERROR来抛出错误,但如果只是在SSMS里显示提示消息,PRINT就足够满足需求了。
内容的提问来源于stack exchange,提问作者Doonie Darkoo




