Sql server 使MDS用户定义脚本中的成员无效

Sql server 使MDS用户定义脚本中的成员无效,sql-server,sql-server-2017,master-data-services,Sql Server,Sql Server 2017,Master Data Services,我正在进行概念验证,以在SQL Server 2017中实现主数据服务。我已经用暂存表加载了一个实体并处理了批处理。我已经建立了业务规则,一个接一个地验证成员,一切都很好 现在,我尝试创建一个用户定义的脚本存储过程,作为一个自定义操作,它将具有更复杂的逻辑并相应地使记录无效。由于逻辑更加复杂,我需要在基于集合的操作存储过程中完成,而不是在迭代的条件函数中完成 如何在自定义操作中以编程方式使记录无效 一个解决办法是:- 将属性/列添加到此实体。我们称之为强制失败。 将此列设为所有用户安全部分的只读

我正在进行概念验证,以在SQL Server 2017中实现主数据服务。我已经用暂存表加载了一个实体并处理了批处理。我已经建立了业务规则,一个接一个地验证成员,一切都很好

现在,我尝试创建一个用户定义的脚本存储过程,作为一个自定义操作,它将具有更复杂的逻辑并相应地使记录无效。由于逻辑更加复杂,我需要在基于集合的操作存储过程中完成,而不是在迭代的条件函数中完成

如何在自定义操作中以编程方式使记录无效

一个解决办法是:- 将属性/列添加到此实体。我们称之为强制失败。 将此列设为所有用户安全部分的只读。 或者,如果您甚至不希望用户在Web UI或Excel加载项中看到这一点,请将显示宽度设置为0。 让您的自定义SP评估复杂条件&无论它在哪里失败,都要将ForceFail列更新为y。 这可以通过以下方式实现:- 将记录保存到暂存叶表&仅提供Code列和ForceFail列的值,然后运行暂存过程以更新数据。或 如果您通过Web API执行此操作,则直接更新ForceFail列的值。 然后,为该实体创建业务规则 条件>等于>选择属性:=ForceFail>属性值:=y 操作>无效>选择您认为应突出显示为无效的任何属性 最后,使用SP或WCF API验证实体。 下面是正在发生的事情:- 您可以执行批量操作来评估复杂规则,识别应该失败的行的代码值。将其ForceFail列更新为y或您选择的任何其他值 业务规则评估此ForceFail值,如果找到该值,则将该行标记为无效。 然后,处理此实体上的业务规则,以便此评估生效。 这种方法的挑战:- 显而易见的一点是,您必须运行额外的暂存批处理或进行多个WCF API调用。 如果您的用户更正了导致其失败的数据,那么与在那里进行评估的常规业务规则不同,验证状态将得到更新。。在自定义SP再次运行以评估和更改ForceFail的值之前,您将无法执行此操作。
如果我错了,我道歉,但是MCVE不是基于有代码的假设吗?我在问一个关于如何做某事的主观问题,据我所知,这是允许的,只要它是有条理和建设性的,我相信它是。谢谢!在第4点中,当您说创建一个自定义SP时,可以使用用户定义的脚本作为业务规则来完成,对吗?我这样问是因为我已经尝试过了,当我让两个业务规则一个接一个地运行时,它们似乎进入了一个无限循环,并不断创建新批来更新ForceFail列。否。我的建议是在数据库中创建一个SP,不要将其作为UDS链接到业务规则中执行。这是因为您提到要对整个实体进行基于集合的一次性评估。如果将此链接作为业务规则执行,则通过设计,它将针对每一行执行,因此将执行相同的评估N时间数N=需要重新验证的行数。因此,我的建议是只创建上面解决方案中列出的DB SP,在登台过程结束后执行一次。非常好。非常感谢!