Wie ermittelt SQL Server, ob eine Funktion deterministisch ist oder nicht?
Betrachten Sie die folgende Funktion, ich denke, sie ist deterministisch (da es sich letztendlich um eine Ganzzahloperation handelt), aber der SQL Server gibt 0 zurück, wenn ich die objectproperty-Methode aufrufe.
Wenn ich verstehe, wie es funktioniert, kann ich besser verstehen, warum ich bei der Beurteilung dieser Funktion falsch liege.
CREATE FUNCTION dbo.EndOfPreviousMonth ( @Date date )
RETURNS date
AS BEGIN
RETURN DATEADD(day, 0 - DAY(@Date), @Date);
END;
SELECT dbo.EndOfPreviousMonth('2010-01-01'); --Usage example
--Returns 0, I expected it to return 1
SELECT OBJECTPROPERTY( OBJECT_ID( 'dbo.EndOfPreviousMonth' ), 'IsDeterministic' );
DATEADD
ist deterministisch.)