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 для получения дополнительной информации проверьте здесь

Другие вопросы по тегам