Oto prawdziwa, naprawdę prosta funkcja, powraca deterministycznie. Jeśli skompiluję to natywne, to nie jest już deterministyczne. Jak mogę uczynić go natywnym skompilowanym i deterministycznym?Jak zoptymalizować pamięć SQL? Native Compiled Function Deterministic
CREATE FUNCTION [hash].[HashDelimiter2]()
RETURNS NCHAR(1)
WITH SCHEMABINDING
AS BEGIN
RETURN N';'
END
GO
/* This does indeed result in YES */
SELECT IS_DETERMINISTIC
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'HashDelimiter2'
/* But then compile it native and it's no longer deterministic */
CREATE FUNCTION [hash].[HashDelimiter3]()
RETURNS NCHAR(1)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS BEGIN ATOMIC WITH (
TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'English'
)
RETURN N';'
END
GO
/* This results in NO */
SELECT IS_DETERMINISTIC
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = 'HashDelimiter3'
Znalazłeś DOWOLNE sprocs, które są natywne, które powracają jako deterministyczne? – dfundako
Nie znalazłem żadnych deterministycznych funkcji natywnych, wszystkie te, które piszę, nie są deterministyczne. –
tylko zgaduję, ponieważ [docs] (https://msdn.microsoft.com/en-us/library/ms178091.aspx) nie zdradza tego szczegółu: czy wykluczyłeś część "ATOMIC WITH" jako już to spowodowało? ustalenie poziomu izolacji transakcji prawdopodobnie wpłynie na stan globalny i kwalifikuje się do niedeterminizmu. btw. Jakiej wersji używasz? – dlatikay