Я написал функцию, которая возвращает int
Тем не менее, я не могу использовать его в проверочном ограничении, эта ошибка выводится:SQL Server 2012: Вызов определенной функции пользователя в проверочном ограничении
«туРипсЫоп» не является признанным встроенным именем функции.
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);
Я видел, как люди писали, что это не представляется возможным вызвать определенные пользователем функции в проверочном ограничении, но here написано можно:
CHECK Пользовательские функции, возвращающие скалярные значения, могут быть вызваны в ограничениях CHECK, если аргумент val ues переданы в столбцы справочных функций только в таблице или константах. Каждый раз, когда процессор запросов проверяет ограничение, процессор запросов вызывает функцию со значениями аргументов, связанными с проверкой текущей строки. Владелец таблицы также должен быть владельцем пользовательской функции, вызываемой ограничением CHECK в таблице.
Вы должны использовать схему, как и NoDisplayName показал. Тем не менее, я также предостерег бы, что комбинация контрольного ограничения и UDF обычно делается для того, чтобы попытаться реализовать ограничения нескольких строк или нескольких таблиц и легко ошибиться для угловых случаев - если бы вы могли показать фактическую функцию и объяснить, что необходимо, у нас может быть лучшее общее предложение. –
Ну, я знаю, что это вообще не очень хорошая идея, но меня попросили сделать это: функция проверяет достоверность электронной почты. –