SQL Server - loop infinito en cursor

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 44 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

loop infinito en cursor

Publicado por Thomas (1 intervención) el 08/10/2019 14:48:02
Hola chicos tengo el siguiente proceso almacenado que no funciona , cada vez que lo ejecuto se queda en un bucle infinito. el objetivo del SP es que recorrer la tabla productos por cada fila evaluar el resultado y si el resultado al contar las filas es mayor a 0 se debe insertar el código en una tabla , si el resultado es 0 se debe insertar el registro según la tercera query.

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
53
54
55
56
57
58
59
60
61
62
63
64
ALTER PROCEDURE [dbo].[SP_Priorizacion_Fuentes]
				--@ano VARCHAR(10)
 
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
DECLARE @suministro AS VARCHAR(8000)
DECLARE @QUERY AS VARCHAR (800)
DECLARE @fecha as varchar (90)
DECLARE @FUENTE AS VARCHAR (800)
DECLARE @ID as varchar (90)
DECLARE @NOMBRE AS VARCHAR (800)
 
 
 DECLARE #P CURSOR FOR
-- Cursor para recorrer rescatar todos los Tags a procesar
SELECT NRO_SUMINISTRO
FROM PRODUCTO
group by nro_suministro
 
 
OPEN #P
-- Recupera primera fila
FETCH NEXT FROM #P INTO 
@suministro
 
-- check for a new row
WHILE @@FETCH_STATUS=0
BEGIN
 
SELECT @QUERY = count (*)  from (
SELECT TOP 1  [ID]
      ,[NRO_SUMINISTRO]
      ,[FEC_MAX]
      ,[FUENTE]
      ,[NOMBRE]
  FROM PRODUCTO
  WHERE ( FUENTE = 1 OR FUENTE =2 OR FUENTE = 3 ) and nro_suministro = @suministro
  order by  FEC_MAX DESC
  ) a
 
 --SELECT @QUERY;
 
    IF @QUERY > 0
    BEGIN
       INSERT INTO dbo.PRUEBA_PRIORIZACION
		SELECT @suministro,@fecha,@NOMBRE, @FUENTE , @ID ;
    END
	if @QUERY < 0
	 	INSERT INTO PRUEBA_PRIORIZACION
		SELECT top 1  @suministro,@fecha,@NOMBRE, @FUENTE , @ID
		FROM PRUEBA_PRIORIZACION
		WHERE  nro_suministro = @suministro
		order by  FUENTE ASC
 
	END
 
FETCH NEXT FROM #P INTO @suministro 
END
CLOSE #P
DEALLOCATE #P


Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

loop infinito en cursor

Publicado por Isaias (4558 intervenciones) el 08/10/2019 17:14:15
Por principio de cuentas, la variable @QUERY, SIEMPRE tendra el valor de 1, ya que esta haciendo un TOP

SELECT @QUERY = count (*) from (
SELECT TOP 1 [ID]

¿Que SQL Server esta manejando?

Los CURSORES no son recomendados, ya que degradan la operacion del servidor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar