如何授予对表值函数的权限

Jac*_*ost 24 sql-server functions

我做得对吗……?

我有一个返回钱的函数...

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
Run Code Online (Sandbox Code Playgroud)

我只是想知道这是否可以转换为 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
Run Code Online (Sandbox Code Playgroud)

错误:

消息 4606,级别 16,状态 1,第 2 行授予或撤销特权 EXECUTE 与对象不兼容。

这个函数是这样使用的:

update table_name set interest = functionName(col1,col2...) where...
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Mar*_*son 36

标量函数需要EXECUTE权限,但是当您转换为表值函数时,所需的权限更改为SELECT.

你现在必须 GRANT SELECT ON functionName TO another_user;

来自BOL

必须先授予所有者以外的用户对某个函数(如果该函数是标量值)的 EXECUTE 权限,然后才能在 Transact-SQL 语句中使用该函数。如果函数是表值的,则用户在引用它之前必须对该函数具有 SELECT 权限。