Hier ist eine wirklich, wirklich einfache Funktion, kommt es deterministisch zurück. Wenn ich es nativ kompiliere, ist es nicht mehr deterministisch. Wie kann ich es nativ kompiliert und deterministisch machen?Wie man SQL-Speicher optimiert Native kompilierte Funktion 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'
Haben Sie gefunden, dass irgendwelche Sprocs, die nativ sind, als deterministisch zurückkehren? – dfundako
Ich habe keine deterministischen nativen Funktionen gefunden, alle von denen, die ich schreibe, kommen nichtdeterministisch heraus. –
nur eine Vermutung, da die [docs] (https://msdn.microsoft.com/en-us/library/ms178091.aspx) dieses Detail nicht verraten: haben Sie den 'ATOMIC WITH'-Teil als ausgeschlossen denn schon? Das Festlegen der Transaktionsisolationsstufe beeinflusst wahrscheinlich den globalen Status und qualifiziert sich für Nicht-Determinismus. übrigens. Welche Version verwendest du? – dlatikay