Mache ich das richtig...?
Ich habe eine Funktion, die Geld zurückgibt ...
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
Ich frage mich nur, ob dies möglich ist, auf iTVF konvertiert zu werden.
Ich habe versucht, dies zu tun, aber ich habe einen Fehler erhalten:
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
ERROR:
Meldung 4606, Ebene 16, Status 1, Zeile 2 Erteilte oder widerrufene Berechtigung AUSFÜHREN ist nicht mit Objekt kompatibel.
Diese Funktion wird folgendermaßen verwendet:
update table_name set interest = functionName(col1,col2...) where...
Danke im Voraus!
sql-server
functions
Jack Frost
quelle
quelle
Antworten:
Für skalare Funktionen sind
EXECUTE
Berechtigungen erforderlich. Wenn Sie jedoch in eine Tabellenwertfunktion konvertiert haben, ändern sich die erforderlichen Berechtigungen inSELECT
.Du musst jetzt
GRANT SELECT ON functionName TO another_user;
Von BOL :
quelle
grant select on functionName to [DOMAINNAME\username];
Es muss sein
GRANT SELECT ON functionName TO [another_user]
- mit Klammern.quelle
Ich habe versucht zu benutzen:
Aber es hat damals nicht funktioniert, ich habe es
EXECUTE
stattdessen verwendetSELECT
, und es funktioniert jetztquelle
grant execute
eine SQL-Funktion auszuführen, immer einen Fehler auslöst.