【发布时间】:2013-05-31 22:25:04
【问题描述】:
当 SQL Server CLR UDT 设置为一个值时,该值(作为字符串)在内部传递给 Parse() 方法,该方法应该返回 UDT 的实例,该实例设置为传入的字符串value 根据该类型的逻辑转换为。到目前为止很好,当输入完全有效时效果很好。
但是,如果传递给 Parse() 的字符串表示无法根据类型定义的业务规则进行解析,应该怎么做?
举个例子,假设我有一个类型代表一本书的 ISBN(我说这只是一个例子)。知道 ISBN 是九位数字后跟一位校验位,或者“978”后跟九位数字后跟一位校验位,因此很容易定义构成有效 ISBN 的业务规则。一个业务要求是系统只能处理有效的 ISBN——任何无效的都应该立即引发错误(并且系统以前不是为此而构建的;它曾经允许任何唯一且非 NULL 的内容进入 ISBN 字段,现在正在收紧)。如果有人输入的字符串不是有效的 ISBN,那么在 Parse() 中采取什么适当的操作?
我尝试抛出ArgumentException,但这会对数据库逻辑的其他部分造成严重破坏,并最终由于未处理的Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. 错误而导致应用程序停止运行。看来一定有比这更好的办法了。
【问题讨论】:
标签: sql-server exception sqlclr user-defined-types