Sql server 2008 是否可以添加一个在不同数据库中调用用户定义函数的检查约束?

Sql server 2008 是否可以添加一个在不同数据库中调用用户定义函数的检查约束?,sql-server-2008,user-defined-functions,sqlclr,check-constraints,Sql Server 2008,User Defined Functions,Sqlclr,Check Constraints,我试图添加一个用户定义的函数,该函数实际调用一列的SQL CLR函数RegEx_IsMatch,但出现以下错误: 在此上下文中,用户定义的函数名不能以数据库名作为前缀 但是,如果该函数位于不同的数据库中,我不确定如何执行此操作。从未尝试过它,但也许您可以在同一个数据库中创建一个helper函数,该函数反过来调用另一个数据库 但是,这可能会失败,因为检查约束被认为是确定性的,而对其他数据库的调用不是确定性的。一般来说,调用另一个数据库似乎不是一个好主意,即使它只是用于正则表达式检查。为什么不将CL

我试图添加一个用户定义的函数,该函数实际调用一列的SQL CLR函数RegEx_IsMatch,但出现以下错误:

在此上下文中,用户定义的函数名不能以数据库名作为前缀


但是,如果该函数位于不同的数据库中,我不确定如何执行此操作。

从未尝试过它,但也许您可以在同一个数据库中创建一个helper函数,该函数反过来调用另一个数据库


但是,这可能会失败,因为检查约束被认为是确定性的,而对其他数据库的调用不是确定性的。一般来说,调用另一个数据库似乎不是一个好主意,即使它只是用于正则表达式检查。为什么不将CLR程序集也添加到此数据库中?

从未尝试过,但也许可以在同一个数据库中创建一个helper函数,该函数反过来调用另一个数据库


但是,这可能会失败,因为检查约束被认为是确定性的,而对其他数据库的调用不是确定性的。一般来说,调用另一个数据库似乎不是一个好主意,即使它只是用于正则表达式检查。为什么不将CLR程序集也添加到此DB中?

您不需要在检查约束中执行此操作。插入后更新触发器应该能够提供与检查约束相同的功能。如果满足或不满足所需条件,则只需取消插入或更新操作。这很容易通过发出回滚来实现,回滚由于事务中存在触发器(即DML语句本身)而起作用。因此,只需按照以下思路做一些事情:

创建触发器dbo.trCheckSomeField 关于dbo.SomeTable 插入后,更新 像 不计数; 如果存在 挑选* 从插入的插件 其中Utility.SQL.RegEx_IsMatchins.SomeField,…=0 开始 回滚传输; RAISERROR“你的数据糟透了!”,16, 1; 回来 终止
您不需要在检查约束中执行此操作。插入后更新触发器应该能够提供与检查约束相同的功能。如果满足或不满足所需条件,则只需取消插入或更新操作。这很容易通过发出回滚来实现,回滚由于事务中存在触发器(即DML语句本身)而起作用。因此,只需按照以下思路做一些事情:

创建触发器dbo.trCheckSomeField 关于dbo.SomeTable 插入后,更新 像 不计数; 如果存在 挑选* 从插入的插件 其中Utility.SQL.RegEx_IsMatchins.SomeField,…=0 开始 回滚传输; RAISERROR“你的数据糟透了!”,16, 1; 回来 终止