SQL Server 2012:在CHECK约束中调用用户定义的函数

时间:2015-02-03 07:33:43

标签: sql-server sql-server-2012 check-constraint

我写了一个返回int的函数 不过,我无法在CHECK约束中使用它,输出此错误:

  

' myFunction的'不是公认的内置函数名称。

create table MyTable(
attr varchar(100) CHECK(myFunction(attr)=1)
);

我也试过

create table MyTable(
attr varchar(100)
);
alter table MyTable
add constraint CheckAttr
CHECK(myFunction(attr)=1);

我看到有人写道,不可能在CHECK约束中调用用户定义的函数,但是here它可以写成:

检查约束 如果参数值仅在表或常量中传递给函数引用列,则可以在CHECK约束中调用返回标量值的用户定义函数。每次查询处理器检查约束时,查询处理器使用与正在检查的当前行相关联的参数值调用该函数。表的所​​有者还必须是由表上的CHECK约束调用的用户定义函数的所有者。

1 个答案:

答案 0 :(得分:4)

当您致电schema name

时,您需要使用scalar function
create table MyTable(
attr varchar(100) CHECK(schema_name.myFunction(attr)=1)
);

如Damien_The_Unbeliever所述,在UDF中使用check constraint获取更多信息check here

时存在弊端