【发布时间】:2010-10-20 04:48:08
【问题描述】:
我们是一个由 SQL Server 数据库开发人员组成的团队。我们的客户混合了 C#/ASP.NET、C# 和 Java Web 服务、Java/Unix 服务和一些 Excel。
我们的客户端开发人员只使用我们提供的存储过程,并且我们希望(当然,在合理的情况下)他们将它们视为 Web 服务方法。
我们的一些客户端开发人员不喜欢 SQL 异常。他们用自己的语言理解它们,但他们不明白 SQL 在我们沟通问题的方式上是有限的。
我不仅仅指 SQL 错误,例如尝试将“bob”插入 int 列。
我也指例外情况,例如告诉他们参考值错误,或者数据已经更改,或者他们不能这样做,因为他的聚合不为零。
他们实际上并没有任何具体的替代方案:他们提到我们应该输出参数,但我们假设异常意味着“处理停止/回滚。
这里的人们如何处理数据库-客户端合同?无论是一般情况下,还是在数据库和客户端代码猴子之间存在分离的情况下。
编辑:
- 我们只使用 SQL Server 2005 TRY/CATCH
- 我们已经将回滚后的所有错误记录到异常表中
- 我们担心我们的一些客户不会检查输出参数并假设一切正常。我们需要标记错误以供支持查看。
- 一切都是异常...客户端需要进行一些消息解析以区分信息与错误。为了将我们的异常与数据库引擎和调用错误分开,它们应该使用错误号(我们当然都是 50,000)
【问题讨论】:
-
“我们担心我们的一些客户不会检查输出参数并假设一切正常。我们需要标记错误以供支持查看。”除了发送电子邮件之外,我想不出在 T-SQL 中执行此操作的方法!
-
客户端例程为任何异常(我们或他们)发送电子邮件...我们的公司构建不允许以任何方式来自 SQL Server 的电子邮件...
标签: sql-server-2005 tsql sql-server-2008 exception stored-procedures