Sql server SQL Server 2012:在检查约束中调用用户定义的函数
我编写了一个返回Sql server SQL Server 2012:在检查约束中调用用户定义的函数,sql-server,sql-server-2012,check-constraint,Sql Server,Sql Server 2012,Check Constraint,我编写了一个返回int 但是,我不能在检查约束中使用它,此错误是输出的: “myFunction”不是可识别的内置函数名 我也试过了 create table MyTable( attr varchar(100) ); alter table MyTable add constraint CheckAttr CHECK(myFunction(attr)=1); 我看到有人写道,在CHECK constraint中调用用户定义的函数是不可能的,但有人写道这是可能的: 检查约束 如果参数值仅在表或
int
但是,我不能在检查约束中使用它,此错误是输出的:
“myFunction”不是可识别的内置函数名
我也试过了
create table MyTable(
attr varchar(100)
);
alter table MyTable
add constraint CheckAttr
CHECK(myFunction(attr)=1);
我看到有人写道,在CHECK constraint中调用用户定义的函数是不可能的,但有人写道这是可能的:
检查约束
如果参数值仅在表或常量中传递给函数引用列,则可以在检查约束中调用返回标量值的用户定义函数。每次查询处理器检查约束时,查询处理器都会使用与正在检查的当前行关联的参数值调用该函数。表的所有者还必须是由表上的CHECK约束调用的用户定义函数的所有者。
调用标量函数时,需要使用
schema name
create table MyTable(
attr varchar(100) CHECK(schema_name.myFunction(attr)=1)
);
正如不信者Damien_所提到的,在
检查约束中使用UDF
存在缺陷,如需更多信息当调用标量函数时,您需要使用模式名
create table MyTable(
attr varchar(100) CHECK(schema_name.myFunction(attr)=1)
);
正如Damien_不信者所提到的,在检查约束中使用UDF
有缺点,需要更多信息/facepalm谢谢,现在可以了)我必须再等几分钟才能接受答案)/facepalm谢谢,现在它可以工作了)我必须再等几分钟才能接受答案)您必须使用模式,正如NoDisplayName所示。但是,我也要提醒大家,检查约束和UDF的结合通常是为了实现多行或多表约束,并且在特殊情况下很容易出错-如果您能展示实际功能并解释所需内容,我们可能会有更好的总体建议。嗯,我知道这通常不是一个好主意,但我被要求这样做:该函数检查电子邮件的有效性。您必须使用模式,正如NoDisplayName所示。但是,我也要提醒大家,检查约束和UDF的结合通常是为了实现多行或多表约束,并且在特殊情况下很容易出错-如果您能展示实际功能并解释所需内容,我们可能会有更好的总体建议。嗯,我知道这通常不是一个好主意,但我被要求这样做:该功能检查电子邮件的有效性。