私はそれを正しくやっていますか...?
お金を返す機能があります...
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...
前もって感謝します!
スカラー関数にはEXECUTE
権限が必要ですが、テーブル値関数に変換すると、必要な権限がSELECT
に変わります。
GRANT SELECT ON functionName TO another_user;
開始 [〜#〜] bol [〜#〜] :
所有者以外のユーザーは、Transact-SQLステートメントで使用する前に、関数(スカラー値の場合)に対するEXECUTE権限を付与する必要があります。 関数がテーブル値の場合、ユーザーは関数を参照する前に、その関数に対するSELECT権限を持っている必要があります。
GRANT SELECT ON functionName TO [another_user]
-大括弧付き。