Czy robię to dobrze...?
Mam funkcję, która zwraca pieniądze ...
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
Zastanawiam się tylko, czy można to przekonwertować na iTVF?
Próbowałem to zrobić, ale wystąpił błąd:
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
BŁĄD:
Msg 4606, poziom 16, stan 1, wiersz 2 Przyznane lub cofnięte uprawnienie EXECUTE nie jest zgodne z obiektem.
Ta funkcja jest używana w następujący sposób:
update table_name set interest = functionName(col1,col2...) where...
Z góry dziękuję!
sql-server
functions
Dziadek Mróz
źródło
źródło
Odpowiedzi:
Funkcje skalarne wymagają
EXECUTE
uprawnień, jednak po przekonwertowaniu na funkcję wycenioną w tabeli wymagane uprawnienia zmieniają się naSELECT
.Musisz teraz
GRANT SELECT ON functionName TO another_user;
Z BOL :
źródło
grant select on functionName to [DOMAINNAME\username];
Musi być
GRANT SELECT ON functionName TO [another_user]
- za pomocą nawiasów.źródło
Próbowałem użyć:
Ale to nie zadziałało, więc użyłem
EXECUTE
zamiast tegoSELECT
i działa terazźródło
grant execute
użycia funkcji SQL zawsze spowoduje zgłoszenie błędu.