存储过程如何返回SSMS生成的Commands Completed Successfully消息
核心结论
"Commands Completed Successfully" 是SSMS客户端收到存储过程执行成功的状态码后,在本地界面渲染的固定提示文本,不是SQL Server引擎返回给客户端的内容,没有任何原生方法可以从数据库侧捕获到这段文本。
可落地的替代方案
- 存储过程侧自定义输出
不需要执着于抓SSMS生成的提示,直接在你自己维护的存储过程里加输出参数,所有业务逻辑执行完成无异常时,主动给输出参数赋值你需要的成功文本即可,shell调用时直接读取输出参数值。
示例存储过程写法:CREATE PROCEDURE dbo.YourTargetProc @resp_msg NVARCHAR(255) OUTPUT AS BEGIN SET NOCOUNT ON; -- 原有业务逻辑写在这里 -- 无报错则赋值成功消息 SET @resp_msg = N'Commands Completed Successfully'; RETURN 0; END - Shell侧根据执行状态生成文本
你通过Unix shell调用存储过程时,不管用sqlcmd、bcp还是FreeTDS组件连接数据库,只要命令执行的退出码为0,就代表存储过程执行成功,直接在shell逻辑里输出你需要的提示文本即可,完全不需要从数据库侧获取。
示例shell判断逻辑:# 替换成你实际的数据库连接和存储过程调用命令 sqlcmd -S 数据库地址 -U 用户名 -P 密码 -d 库名 -Q "EXEC dbo.YourTargetProc" if [ $? -eq 0 ]; then echo "Commands Completed Successfully" else echo "存储过程执行失败" exit 1 fi
注意事项
不要浪费时间尝试用捕获信息事件、SQL Trace、Extended Events之类的方式捞这段文本,这段文本从始至终没有出现在数据库服务端和客户端的通信内容里,是SSMS自己在本地生成的UI提示,任何数据库侧的捕获方法都不可能拿到它。
内容的提问来源于stack exchange,提问作者lazyboy
相关产品推荐
相关产品推荐

