2016-04-28 3 views
0

Ich erhalte den folgenden Fehler beim Versuch, eine rekursive Skalarfunktion aufzurufen.OPTION (maxrecursion 0) funktioniert nicht mit rekursiver Skalarfunktion in SQLServer 2008 R2

Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32). 

Selbst wenn ich OPTION (MAXRECURSION 0) in Aufruf funktioniert, erzeugt er die gleichen Fehler

SELECT dbo.fn_CalculateTotal('2015-02-01') OPTION (maxrecursion 0) ; 

dbo.fn_CalculateTotal ('2015.02.01') ruft sich selbst rekursiv für jeden Monat (nur bis zu einem maximalen Datum, für das es 0 zurückgibt). Wenn das maximale Datum mehr als 32 Monate entfernt ist, erhalte ich den obigen Fehler.

Ich bin mir nicht sicher, was hier falsch ist? Funktion funktioniert gut für weniger als 32 Monate Daten (31 rekursive Aufrufe).

Antwort

7

OPTION (maxrecursion 0) gilt für rekursive allgemeine Tabellenausdrücke (CTEs). Das Verschachtelungslimit für gespeicherte Prozeduren, Funktionen, Trigger und Ansichten ist fest auf 32 Ebenen codiert und kann nicht erhöht werden. Sie müssen den Code neu entwerfen, um die Verschachtelung auf weniger als 32 zu begrenzen.

Ein rekursiver CTE ist möglicherweise eine sinnvolle Alternative zu einem verschachtelten Funktionsaufruf.

+0

Hallo Ed, Danke für eine schnelle Antwort. Ich kann die Verschachtelung nicht auf weniger als 32 begrenzen. Ich werde versuchen, es mit rekursiven CTE zu codieren. –

Verwandte Themen