Frage

Ich habe zwei Funktionen: fn_without_param und fn_with_param

 CREATE FUNCTION [dbo].[fn_Without_Param]
 (
 )
 ...
 INNER JOIN .. ON .. AND SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )

und

/*
     I am requesting it so:
    declare @SubmitDate     datetime
    set @SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
    select * from [dbo].[fn_With_Param] (@SubmitDate)
*/



CREATE FUNCTION [dbo].[fn_With_Param]
(
    @SubmitDate datetime    
)
...
INNER JOIN .. ON .. AND SubmitDate = @SubmitDate  

Im ersten Fall habe ich nicht deterministische (?) Funktionen (wegen Getutcdate) und ich habe den zweiten mit demselben Eingangsparameter (konvertieren , Sekunden, Millisekunde). Ist meine Funktion nicht deterministisch? So erkennt man dies, vielleicht hat SQL Server eine öffentliche Marke. Warum ist die zweite Funktion langsamer?

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob es eine Flagge gibt, aber es gibt eine Referenz bei http://msdn.microsoft.com/en-us/library/ms178091.aspx von denen eingebaute Funktionen deterministisch sind.

GetDate () und getutcdate () sind nicht deterministisch, da Sie sie mehrmals mit denselben Parametern aufrufen, was in diesem Fall keine Werte erhalten. Mit anderen Worten, der Rückgabewert wird nicht durch Eingabe bestimmt.

Wenn der zweite der zweite angeht als der erste, prüfen Sie, ob die implizite Konvertierung zwischen SubmitDate = @Submitdate implizit ist. Sind beide dateTime?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top