Я делаю это правильно ...?
У меня есть функция, которая возвращает деньги ...
CREATE FUNCTION functionName( @a_principal money, @a_from_date
datetime, @a_to_date datetime, @a_rate float ) RETURNS money AS BEGIN
DECLARE @v_dint money set @v_dint = computation_here
set @v_dint = round(@v_dint, 2)
RETURN @v_dint
END
GO
Grant execute on functionName to another_user
Go
Мне просто интересно, если это можно преобразовать в iTVF?
Я пытался сделать это, но я получил ошибку:
CREATE FUNCTION functionName ( @a_principal money, @a_from_date
datetime, @a_to_date datetime, @a_rate float )
RETURNS TABLE AS
RETURN SELECT returnMoney = computation_here
GO
Grant execute on functionName to another_user Go
ОШИБКА:
Сообщение 4606, уровень 16, состояние 1, строка 2 Предоставленная или отозванная привилегия EXECUTE не совместима с объектом.
Эта функция используется так:
update table_name set interest = functionName(col1,col2...) where...
Заранее спасибо!
sql-server
functions
Джек Фрост
источник
источник
Ответы:
Для скалярных функций требуются
EXECUTE
разрешения, однако при преобразовании в табличную функцию требуемые разрешения изменяютсяSELECT
.Вы должны сейчас
GRANT SELECT ON functionName TO another_user;
От BOL :
источник
grant select on functionName to [DOMAINNAME\username];
Это должно быть
GRANT SELECT ON functionName TO [another_user]
- с скобками.источник
Я пытался использовать:
Но это не сработало, тогда я использовал
EXECUTE
вместоSELECT
, и теперь работаетисточник
grant execute
использования функции SQL всегда приводит к ошибке.