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' );
sql-server-2008
sql-server-2008-r2
Brian Dishaw
quelle
quelle
DATEADD
ist deterministisch.)Antworten:
Zunächst wird geprüft, ob verwendete Funktionen deterministisch sind .
Dann wird geprüft, ob Ihre Funktion schemagebunden ist.
(Oder in umgekehrter Reihenfolge.)
Fügen Sie also
with schemabinding
Ihrer Funktion hinzu.quelle