Frage : Die Aussage beendet. Die maximale Rekursion 100 ist vor Aussagenbeendigung erschöpft worden

Hallo habe ich den below sql-Code und ich halte, der Störung „die Aussage zu erhalten beendet. Die maximale Rekursion 100 ist vor Aussagenbeendigung "

Any Ideen warum erschöpft worden?
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
WITH cte WIE (AUSERWÄHLTES dbo.vw_TFAM_ALL.TicketID, dbo.vw_TFAM_ALL.CC, dbo.vw_TFAM_ALL.FormType, dbo.vw_TFAM_ALL.SubmittedOn, 
                                                    dbo.vw_TFAM_ALL.AcknBy, dbo.vw_TFAM_ALL.AcknOn, dbo.vw_TFAM_ALL.SubmittedBy, dbo.vw_TFAM_ALL.Status, 
                                                    dbo.vw_TFAM_ALL.isSubmitted, dbo.vw_TFAM_ALL.IndvACF2ID, dbo.vw_TFAM_ALL.PendOrPost, dbo.vw_TFAM_ALL.NoOfEmpl, 
                                                    dbo.vw_TFAM_ALL.Business, dbo.vw_TFAM_ALL.ReqType, FALL WENN [OneForm]. [dbo] „erfüllte“ .vw_TFAM_ALL.Status = ODER
                                                    [OneForm]. [dbo] „annullierte“ .vw_TFAM_ALL.Status = DANN [OneForm]. [dbo]. [vw_TFAM_SLA_Times] .SLA_in_Min SONST NULL 
                                                    ENDE ALS SLA_Minutes, FALL WENN [OneForm]. [dbo] „erfüllte“ .vw_TFAM_ALL.Status = ODER
                                                    [OneForm]. [dbo] „annullierte“ .vw_TFAM_ALL.Status = DANN [OneForm]. [dbo]. [vw_TFAM_SLA_Times] SONST NULL .SLA_in_Min/1440 
                                                    ENDE ALS SLA_Days
                             VON INNEREM dbo.vw_TFAM_SLA_Times VERBINDEN
                                                    dbo.vw_TFAM_ALL AUF dbo.vw_TFAM_ALL.TicketID = dbo.vw_TFAM_SLA_Times.ticketid)



    TicketID, cm, FormType, SubmittedOn, AcknBy, AcknOn, SubmittedBy, der Status, isSubmitted, IndvACF2ID, PendOrPost, NoOfEmpl, Geschäft, ReqType VORWÄHLEN, 
                            SLA_Minutes, SLA_Days, FALL WENN FormType = „BuildingPass“ UND SLA_Days <= 3 DANN 1 WENN FormType = „CancelAccess“ UND 
                            SLA_Days <= 4 DANN 1 WENN FormType = „NameChange“ UND SLA_Days <= 10 DANN 1 WENN FormType = „ChangeAccess“ UND 
                            SLA_Days <= 10 DANN 1 WENN FormType = „ETCChange“ UND SLA_Days <= 3 DANN 1 WENN FormType = „EmpStatusChange“ UND 
                            SLA_Days <= 3 DANN 1 WENN FormType = „HomeAccess“ UND ReqType = „neuer Zugang“ UND 
                            SLA_Days <= 15 DANN 1, WENN FormType = „HomeAccess“ UND ReqType = „Anwendung“ addieren UND 
                            SLA_Days <= 15 DANN 1 WENN FormType = „HomeAccess“ UND ReqType = „Löschen-Hauptzugang“ UND 
                            SLA_Days <= 10 DANN 1 WENN FormType = „HomeAccess“ UND ReqType = „verlorener/geschädigter Scheinwiedereinbau -/lief“ ab UND 
                            SLA_Days <= 15 DANN 1 WENN FormType = „NewHire“ UND SLA_Days <= 10 DANN 1 WENN FormType = „PassReset“ UND 
                            SLA_Days <= 3 DANN 1 WENN FormType = „ReactivationAccess“ UND SLA_Days <= 3 DANN 1 WENN FormType = „SharedDrive“ UND 
                            SLA_Days <= 7 DANN 1 WENN FormType = „SuspendAccess“ UND SLA_Days <= 3 DANN 1 WENN FormType = „TMChange“ UND 
                            SLA_Days <= 5 DANN 1 WENN FormType = „TransferIn“ UND SLA_Days <= 10 DANN 1 WENN FormType = „TransferOut“ UND 
                            SLA_Days <= 4 DANN 1 WENN FormType = „PositionChange“ UND SLA_Days <= 10 DANN 1 WENN FormType = „AccessExc“ UND 
                            SLA_Days <= 10 DANN 1, WENN FormType = „GenericEmail“ UND ReqType = „neue generische Post Identifikation“ verursachen UND 
                            SLA_Days <= 10 DANN 1 WENN FormType = „GenericEmail“ UND ReqType = „Löschung-generische Post Identifikation“ UND 
                            SLA_Days <= 5 DANN 1, WENN FormType = „GenericEmail“ UND ReqType = „neue Verteilerliste“ erstellen UND 
                            SLA_Days <= 7 DANN 1 WENN FormType = „GenericEmail“ UND ReqType = „Löschung-Verteilerliste“ UND 
                            SLA_Days <= 5 DANN 1 WENN FormType = „GenericEmail“ UND ReqType = „Änderungs-Verteilerliste“ UND SLA_Days <= 5 DANN 1 SONST NULL 
                            ENDE ALS SLA_Met, 
                            FALL, WENN FormType = „AccessExc“ DANN „zurückgreifen - Ausnahme-Prozess“ WENN FormType = „BuildingPass“ DANN „Gebäude-Durchlauf“ WENN FormType
                             = „CancelAccess Zugang“ DANN „annullieren“, WENN FormType = „ChangeAccess“ DANN „Zugang“ ändern, WENN FormType = „EmpStatusChange“ DANN „Beschäftigung-Status-Änderung“
                             WENN FormType = „ETCChange“ DANN „zu DB usw.-Admin“ ändern, WENN FormType = „GenericEmail“ DANN „generisch“ mailen, WENN FormType = „HomeAccess“
                             DANN „Hauptzugang“, WENN FormType = „NameChange“ DANN „Namensänderung“, WENN FormType = „NewHire“ DANN „neue Miete“, WENN FormType = „PassReset“
                             DANN „Kennwort stellte sich“ zurück, WENN FormType = „PositionChange“ DANN „/Rollen-Änderung“ in Position bringen, WENN FormType = „ReactivationAccess“ DANN „Reaktivierung-Zugang“
                             ALS FormType = „SharedDrive“ DANN „Antriebs-Zugang“ teilte, WENN FormType = „SuspendAccess“ DANN „Zugang“ verschieben, WENN FormType = „TMChange“
                             DANN „Mannschaft-Manager-Änderung nur“, WENN FormType = „TransferIn“ DANN „in“ bringen, WENN FormType = „TransferOut“ DANN „heraus“ ENDE WIE bringen
                             FormName
     Vom cte ALS cte_1

Antwort : Die Aussage beendet. Die maximale Rekursion 100 ist vor Aussagenbeendigung erschöpft worden

Den Code unten versuchen -!! VORSICHT!! - sie bitte gänzlich prüfen.

Meine Vermutung ist, dass CTE Rekursionen kumulativ für alles rekursive/eingebettete CTEs gezählt.  So, wenn Sie 3 Niveaus CTE haben und erste Seite 2. Niveau veranlaßt, 50mal zu schlingen, veranlaßt 2. Niveau 3. Niveau, 80mal (80 Tage), Sie zu schlingen erhalten 4000 Rekursionen, bereits ohne auf der ersten Seite sogar zu schlingen.

Erwägen zu verwenden, während die Schleifen oder andere Methoden, zum der Zahl CTE zu verringern benennt.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
FUNKTION [dbo] VERURSACHEN. [CalcMinutesSLA_TFAM] (
 @startTime DATUM/UHRZEIT,
 @endTime DATUM/UHRZEIT
 ) 
zurückbringt int bringt
wie
anfangen
	@minutes int erklären;
	Datum/Uhrzeit @startPlus1 erklären
	Datum/Uhrzeit @endLess1 erklären
	-- die Strecke während der ganzen Tage in-between ausarbeiten
	vorwählen @startPlus1 = datediff (d, 0, @startTime+1),
			@endLess1 = datediff (d, 0, @endTime-1)
	-- überprüfen, wieviele Nichtwochenende Tage in dieser Strecke existieren
	@minutes vorwählen = 480 * (Bekehrter (int, @endLess1-@startPlus1) /7*5 + Zählimpuls (*))
	vom Meister. .spt_values
	wo type='P und Zahl zwischen 0 und datediff (d,
		@startPlus1+convert (int, @endLess1-@startPlus1) /7*7, @endLess1)
		und datename (dw, @startPlus1+number)! = „S“
	-- überprüfen, wieviele Nichtwochenende Feiertage in dieser Strecke existieren
	@minutes = @minutes vorwählen - Zählimpuls (*)
	von den web_holidays
	wo HolidayDate zwischen @startPlus1 und @endless1
	  und verlassen (datename (dw, HolidayDate), 1)! = „S“
	-- Zeiten für zuerst/letzte Tage justieren
	wenn datepart (hh, @startTime) < 9="" set="">= gesetztes @endTime 17 = datediff (DD, 0, @endTime) +17.0/24
	wenn @startTime >= @endTime Rückkehr verschmilzt (@minutes, 0);
	-- wenn Anfangsdatum nicht ein Feiertag und nicht ein Wochenende ist, Minuten addieren
	@minutes = @minutes vorwählen +
		datediff (MI, @startTime, datediff (DD, 0, @startTime) +17.0/24)
	wo nicht existiert (
		* von den web_holidays vorwählen
		wo HolidayDate = datediff (DD, 0, @startTime))
		und verlassen (datename (dw, @startTime), 1)! = „S“
	-- wenn Enddatum nicht ein Feiertag und nicht ein Wochenende ist, Minuten addieren
	@minutes = @minutes vorwählen +
		datediff (MI, datediff (DD, 0, @endTime) +9.0/24, @endTime)
	wo nicht existiert (
		* von den web_holidays vorwählen
		wo HolidayDate = datediff (DD, 0, @endTime))
		und verlassen (datename (dw, @endTime), 1)! = „S“
	-- wenn start=end, wir den Tag zweimal gezählt, 480 beseitigen
	@minutes = @minutes vorwählen - 480
	wo nicht existiert (
		* von den web_holidays vorwählen
		wo HolidayDate = datediff (DD, 0, @endTime))
		und verlassen (datename (dw, @endTime), 1)! = „S“
		und datediff (d, @startTime, @endTime) = 0 -- der gleiche Tag
   zurückgehen verschmelzen (@minutes, 0);
Ende
GEHEN
Weitere Lösungen  
 
programming4us programming4us