Suis-je en train de bien faire ...?
J'ai une fonction qui rapporte de l'argent ...
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
Je me demande simplement si cela peut être converti en iTVF?
J'ai essayé de faire ça mais j'ai une erreur:
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
ERREUR:
Msg 4606, niveau 16, état 1, ligne 2 Privilège accordé ou révoqué EXECUTE n'est pas compatible avec l'objet.
Cette fonction est utilisée comme ceci:
update table_name set interest = functionName(col1,col2...) where...
Merci d'avance!
sql-server
functions
Jack Frost
la source
la source
Réponses:
Les fonctions scalaires nécessitent
EXECUTE
autorisations, mais lorsque vous avez converti en une fonction de valeur de table, les autorisations requises changent enSELECT
.Tu dois maintenant
GRANT SELECT ON functionName TO another_user;
De BOL :
la source
grant select on functionName to [DOMAINNAME\username];
Cela doit être
GRANT SELECT ON functionName TO [another_user]
- avec des crochets.la source
J'ai essayé d'utiliser:
Mais ça n'a pas marché, alors, j'ai utilisé à la
EXECUTE
place deSELECT
, et ça marche maintenantla source
grant execute
sur une fonction SQL générera toujours une erreur.