Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 正在寻找sql server中用户友好的CheckConstraint错误消息的策略_Sql Server_Check Constraints - Fatal编程技术网

Sql server 正在寻找sql server中用户友好的CheckConstraint错误消息的策略

Sql server 正在寻找sql server中用户友好的CheckConstraint错误消息的策略,sql-server,check-constraints,Sql Server,Check Constraints,我正在设置一个数据库,有几个表中有许多行间依赖关系,需要在创建/更新行之前进行检查。有许多字段具有来自许多源的max/min/avg/stdev 我想我会创建一些约束,确保所有关系的max>=min,avg>=min,avg=0。通过这种方式,我在数据库中设置了它,任何不正确地接触数据的操作都会抛出一个错误。这个机制工作得很好…除了从用户的角度来看错误消息是可怕的,基本上是说一个约束失败了,让用户决定20个约束中哪一个是坏的 我可以在客户机代码中通过查看约束异常,然后运行数据来查找问题来解决这个

我正在设置一个数据库,有几个表中有许多行间依赖关系,需要在创建/更新行之前进行检查。有许多字段具有来自许多源的max/min/avg/stdev

我想我会创建一些约束,确保所有关系的max>=min,avg>=min,avg=0。通过这种方式,我在数据库中设置了它,任何不正确地接触数据的操作都会抛出一个错误。这个机制工作得很好…除了从用户的角度来看错误消息是可怕的,基本上是说一个约束失败了,让用户决定20个约束中哪一个是坏的

我可以在客户机代码中通过查看约束异常,然后运行数据来查找问题来解决这个问题。该解决方案在两个地方进行了验证


我不希望将错误消息分配给每个约束(在db中),并通过异常机制将该消息过滤到UI。是否有某种机制可以让用户友好的消息渗透到UI,而不复制业务逻辑中的数据验证?更重要的是,这类问题的基本策略是什么?

从服务器返回的唯一您可以控制的是约束名称-因此,请尝试确保这些约束名称尽可能具有描述性,或者将约束名称映射到异常处理程序中用户友好的错误消息

在这种情况下,尝试使每个约束尽可能细化,因此每种类型的失败都是不同约束的失败。当然,您还有一个问题,SQL Server只会报告第一个失败的约束—您的数据实际上可能会失败多个约束


在他们提交数据之前,除了在你的申请中重复检查外,我想不出你还能做什么。我倾向于认为这种重复类似于web页面上的客户端/服务器验证——您在客户端运行验证,以改善用户体验,并避免不必要的往返服务器。但是,如果客户端验证因任何原因失败,服务器必须保护自己。

同意:业务和验证逻辑应该意味着数据库从不抛出错误。但是RDBMS负责数据的完整性,所以一般来说客户端不应该依赖检查约束来进行数据验证?对于这个例子,风险很低,因为没有神奇的数字(max>=min类)。