SQL Server 2012: вызвать пользовательскую функцию в ограничении CHECK
Я написал функцию, которая возвращает 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, но здесь написано, что это возможно:
Ограничения CHECK Пользовательские функции, которые возвращают скалярные значения, могут вызываться в ограничениях CHECK, если значения аргументов передаются в столбцы со ссылками на функции только в таблице или константах. Каждый раз, когда обработчик запросов проверяет ограничение, обработчик запросов вызывает функцию со значениями аргументов, связанных с текущей проверяемой строкой. Владелец таблицы также должен быть владельцем пользовательской функции, вызываемой ограничением CHECK для таблицы.
1 ответ
Решение
Вам нужно использовать schema name
когда ты звонишь scalar function
create table MyTable(
attr varchar(100) CHECK(schema_name.myFunction(attr)=1)
);
Как упомянуто Damien_The_Unbeliever, есть недостатки в использовании UDF
в check constraint
для получения дополнительной информации проверьте здесь