Cuestión : La declaración terminó. La repetición máxima 100 se ha agotado antes de la terminación de la declaración

Hola tengo el código below del sql y guardo el conseguir el error “de la declaración terminada. ¿La repetición máxima 100 se ha agotado antes ideas del

Any de la terminación de la declaración " porqué?
class= > " claro " del
> del " codeSnippet " del class= del
class= " lineNumbers " del
class= del
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:
36:
37:
38:
39:
40:
41:
cte notpretty del >WITH " del class= " de " codeSnippet947215 del id= del
           
class= del

Respuesta : La declaración terminó. La repetición máxima 100 se ha agotado antes de la terminación de la declaración

¡Intentar el código abajo -!! ¡PRECAUCIÓN!! - probarla por favor a fondo.

Mi conjetura es que las repeticiones de CTE están contadas acumulativo para todo el CTEs recurrente/encajado.  Tan si usted tiene 3 niveles de CTE y el nivel superior hace el 2do nivel colocar 50 veces, el 2do nivel hace el 3ro nivel colocar 80 veces (80 días), usted consigue 4000 repeticiones ya sin incluso la colocación en el nivel superior.

Considerar usar mientras que los lazos u otros métodos para reducir el número de CTE llaman.
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:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
CREAR LA FUNCIÓN [dbo]. [CalcMinutesSLA_TFAM] (
 FECHA Y HORA del @startTime,
 FECHA Y HORA del @endTime
 ) 
vuelve la internacional
como
comenzar
	declarar los @minutes internacional;
	declarar la fecha y hora @startPlus1
	declarar la fecha y hora @endLess1
	-- resolver la gama para los días enteros mientras tanto
	seleccionar @startPlus1 = el datediff (d, 0, @startTime+1),
			@endLess1 = datediff (d, 0, @endTime-1)
	-- comprobar cuántos días del no-fin de semana existen en esta gama
	seleccionar los @minutes = 480 * (convertido (internacional, @endLess1-@startPlus1) /7*5 + la cuenta (*))
	del amo. .spt_values
	donde type='P y número entre 0 y datediff (d,
		@startPlus1+convert (internacional, @endLess1-@startPlus1) /7*7, @endLess1)
		¡y datename (dw, @startPlus1+number)! = “S”
	-- comprobar cuántos días de fiesta del no-fin de semana existen en esta gama
	seleccionar los @minutes = los @minutes - la cuenta (*)
	de web_holidays
	donde HolidayDate entre @startPlus1 y @endless1
	  ¡e ido (datename (dw, HolidayDate), 1)! = “S”
	-- ajustar las épocas para primero/los días pasados
	si @endTime 17 del datepart (hh, < 9="" set="">@startTime) = = datediff determinados (DD, 0, @endTime) +17.0/24
	si se une la vuelta del @endTime del >= del @startTime (@minutes, 0);
	-- si la fecha de inicio no es un día de fiesta y no un fin de semana, agregar los minutos
	seleccionar los @minutes = los @minutes +
		datediff (MI, @startTime, datediff (DD, 0, @startTime) +17.0/24)
	donde no existe (
		seleccionar * de web_holidays
		donde HolidayDate = datediff (DD, 0, @startTime))
		¡e ido (datename (dw, @startTime), 1)! = “S”
	-- si la fecha de extremo no es un día de fiesta y no un fin de semana, agregar los minutos
	seleccionar los @minutes = los @minutes +
		datediff (MI, datediff (DD, 0, @endTime) +9.0/24, @endTime)
	donde no existe (
		seleccionar * de web_holidays
		donde HolidayDate = datediff (DD, 0, @endTime))
		¡e ido (datename (dw, @endTime), 1)! = “S”
	-- si el start=end, nosotros ha contado el día dos veces, quitar 480
	seleccionar los @minutes = los @minutes - 480
	donde no existe (
		seleccionar * de web_holidays
		donde HolidayDate = datediff (DD, 0, @endTime))
		¡e ido (datename (dw, @endTime), 1)! = “S”
		y datediff (d, @startTime, @endTime) = 0 -- el mismo día
   volver se unen (@minutes, 0);
extremo
IR
Otras soluciones  
 
programming4us programming4us