Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/07/2014, 01:45
raulinupf
 
Fecha de Ingreso: julio-2014
Mensajes: 6
Antigüedad: 9 años, 10 meses
Puntos: 0
Error cerrar bucle while

Buenos dias,
soy principiante en sql y estoy realizando una base de datos. Todo iba bastante bien hasta que me atasqué con la última tabla. Mencionar que estoy utuilizando SQL Server 2014.
Lo que intento realizar es lo siguiente: tengo varias tablas: Envios, Prevision Produccion y Stocks Futuros.
En Prevision Produccion estoy haciendo un desencadenador, para que cada vez que se modifica la info se actualize la tabla Stocks futuros mediente la formula: Stocks Futuros=Prevision Produccion - Envios
Por ese motivo he intentado "traducir" este pseudocodigo para llegar a este objetivo:

Mientras contador<numero filas tabla Prevision Produccion {
Si pieza existe en stocks futuros
lunes=lunes+ Stock_real + [Prevision Produccion].lunes_actual -Envios.lunes
martes=....
Si pieza NO existe en stocks futuros
lunes= Stock_real + [Prevision Produccion].lunes_actual -Envios.lunes
martes=....
contador++
}

Aqui os pongo mi codigo a ver si me podeis echar una mano:
Código SQL:
Ver original
  1. USE [Logistica]
  2. GO
  3. /****** Object:  Trigger [dbo].[Stocks_futuros_Prevision_produccion]    Script Date: 07/07/2014 12:07:29 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9.  
  10. ALTER TRIGGER [dbo].[Stocks_futuros_Prevision_produccion]
  11. ON [dbo].[Prevision Produccion]
  12. FOR INSERT
  13. AS
  14.  
  15. DECLARE @i INT
  16. DECLARE @srtn NCHAR(50)
  17.  
  18. SET @i=0
  19.  
  20. WHILE (@i) <(SELECT COUNT(*) FROM [Prevision Produccion])
  21. BEGIN
  22.  
  23. SELECT * FROM [Prevision Produccion] WHERE [Prevision Produccion].indice= @i
  24.  
  25. SET @srtn= (SELECT Sorten FROM [Prevision Produccion] WHERE [Prevision Produccion].indice= @i)
  26.  
  27. IF (SELECT lunes, martes, miercoles, jueves, viernes, sabado, domingo_SEM_ACTUAL, lunes_proximo, martes_proximo, miercoles_proximo, jueves_proximo, viernes_proximo, sabado_proximo, [domingo_proximo (+1 SEM)], [Semana_actual+2], [Semana_actual+3], [Semana_actual+4], [Semana_actual+5], [Semana_actual+6], [Semana_actual+7] FROM [Stocks Futuros] WHERE [Stocks Futuros].Sorten= @srtn) IS NOT NULL
  28.  
  29. UPDATE [Stocks Futuros]
  30.  
  31. SET lunes = [Stocks Futuros].lunes + Stock_real +lunes_actual - [Envios].lunes,
  32.     martes = [Stocks Futuros].martes + [Stocks Futuros].lunes + inserted.martes_actual - Envios.martes,
  33.     miercoles = [Stocks Futuros].miercoles + [Stocks Futuros].martes + inserted.miercoles_actual - Envios.miercoles,
  34.     jueves = [Stocks Futuros].jueves + [Stocks Futuros].miercoles + inserted.jueves_actual - Envios.jueves,
  35.     viernes = [Stocks Futuros].viernes + [Stocks Futuros].jueves + inserted.viernes_actual - Envios.viernes,
  36.     sabado = [Stocks Futuros].sabado + [Stocks Futuros].viernes + inserted.sabado_actual - Envios.sabado,
  37.     domingo_SEM_ACTUAL = [Stocks Futuros].domingo_SEM_ACTUAL + [Stocks Futuros].sabado + inserted.domingo_actual - Envios.domingo_SEM_ACTUAL,
  38.     lunes_proximo = [Stocks Futuros].lunes_proximo+ [Stocks Futuros].domingo_SEM_ACTUAL + inserted.Lunes_proximo - Envios.unidades8,
  39.     martes_proximo = [Stocks Futuros].martes_proximo + [Stocks Futuros].lunes_proximo + inserted.Martes_proximo - Envios.unidades9,
  40.     miercoles_proximo = [Stocks Futuros].miercoles_proximo+ [Stocks Futuros].martes_proximo + inserted.Miercoles_proximo - Envios.unidades10,
  41.     jueves_proximo = [Stocks Futuros].jueves_proximo + [Stocks Futuros].miercoles_proximo + inserted.Jueves_proximo - Envios.unidades11,
  42.     viernes_proximo = [Stocks Futuros].viernes_proximo + [Stocks Futuros].jueves_proximo + inserted.Viernes_proximo - Envios.unidades12,
  43.     sabado_proximo = [Stocks Futuros].sabado_proximo + [Stocks Futuros].viernes_proximo + inserted.Sabado_proximo - Envios.unidades13,
  44.     [domingo_proximo (+1 SEM)] = [Stocks Futuros].[domingo_proximo (+1 SEM)] + [Stocks Futuros].sabado_proximo + inserted.Domingo_proximo - Envios.[unidades14_+1 SEM],
  45.     [Semana_actual+2] = [Stocks Futuros].[Semana_actual+2] + [Stocks Futuros].[domingo_proximo (+1 SEM)] + inserted.[Semana_actual+2] - (Envios.unidades15 + Envios.unidades16+ Envios.unidades17 + Envios.unidades18 + Envios.unidades19 + Envios.unidades20 + Envios.[unidades21_+2 SEM]),
  46.     [Semana_actual+3] = [Stocks Futuros].[Semana_actual+3] + [Stocks Futuros].[Semana_actual+2] + inserted.[Semana_actual+3] - (Envios.unidades22 + Envios.unidades23+ Envios.unidades24 + Envios.unidades25 + Envios.unidades26 + Envios.unidades27 + Envios.[unidades28_+3 SEM]),
  47.     [Semana_actual+4] = [Stocks Futuros].[Semana_actual+4] + [Stocks Futuros].[Semana_actual+3] + inserted.[Semana_actual+4] - (Envios.unidades29 + Envios.unidades30+ Envios.unidades31 + Envios.unidades32 + Envios.unidades33 + Envios.unidades34 + Envios.[unidades35_+4 SEM]),
  48.     [Semana_actual+5] = [Stocks Futuros].[Semana_actual+5] + [Stocks Futuros].[Semana_actual+4] + inserted.[Semana_actual+5] - (Envios.unidades36 + Envios.unidades37+ Envios.unidades38 + Envios.unidades39 + Envios.unidades40 + Envios.unidades41 + Envios.[unidades42_+5 SEM]),
  49.     [Semana_actual+6] = [Stocks Futuros].[Semana_actual+6] + [Stocks Futuros].[Semana_actual+5] + inserted.[Semana_actual+6] - (Envios.unidades43 + Envios.unidades44+ Envios.unidades45 + Envios.unidades46 + Envios.unidades47 + Envios.unidades48 + Envios.[unidades49_+6 SEM]),
  50.     [Semana_actual+7] = [Stocks Futuros].[Semana_actual+7] + [Stocks Futuros].[Semana_actual+6] + inserted.[Semana_actual+7] - (Envios.unidades50 + Envios.unidades51+ Envios.unidades52 + Envios.unidades53 + Envios.unidades54 + Envios.unidades55 + Envios.[unidades56_+7 SEM])
  51.  
  52. FROM [Envios] INNER JOIN inserted
  53. ON [Envios].Sorten = inserted.Sorten
  54.  
  55.  
  56. ELSE
  57.  
  58. UPDATE [Stocks Futuros]
  59.  
  60. SET lunes =  Stock_real +lunes_actual - [Envios].lunes,
  61.     martes = [Stocks Futuros].lunes + inserted.martes_actual - Envios.martes,
  62.     miercoles = [Stocks Futuros].martes + inserted.miercoles_actual - Envios.miercoles,
  63.     jueves = [Stocks Futuros].miercoles + inserted.jueves_actual - Envios.jueves,
  64.     viernes = [Stocks Futuros].jueves + inserted.viernes_actual - Envios.viernes,
  65.     sabado = [Stocks Futuros].viernes + inserted.sabado_actual - Envios.sabado,
  66.     domingo_SEM_ACTUAL = [Stocks Futuros].sabado + inserted.domingo_actual - Envios.domingo_SEM_ACTUAL,
  67.     lunes_proximo = [Stocks Futuros].domingo_SEM_ACTUAL + inserted.Lunes_proximo - Envios.unidades8,
  68.     martes_proximo = [Stocks Futuros].lunes_proximo + inserted.Martes_proximo - Envios.unidades9,
  69.     miercoles_proximo = [Stocks Futuros].martes_proximo + inserted.Miercoles_proximo - Envios.unidades10,
  70.     jueves_proximo = [Stocks Futuros].miercoles_proximo + inserted.Jueves_proximo - Envios.unidades11,
  71.     viernes_proximo = [Stocks Futuros].jueves_proximo + inserted.Viernes_proximo - Envios.unidades12,
  72.     sabado_proximo = [Stocks Futuros].viernes_proximo + inserted.Sabado_proximo - Envios.unidades13,
  73.     [domingo_proximo (+1 SEM)] = [Stocks Futuros].sabado_proximo + inserted.Domingo_proximo - Envios.[unidades14_+1 SEM],
  74.     [Semana_actual+2] = [Stocks Futuros].[domingo_proximo (+1 SEM)] + inserted.[Semana_actual+2] - (Envios.unidades15 + Envios.unidades16+ Envios.unidades17 + Envios.unidades18 + Envios.unidades19 + Envios.unidades20 + Envios.[unidades21_+2 SEM]),
  75.     [Semana_actual+3] = [Stocks Futuros].[Semana_actual+2] + inserted.[Semana_actual+3] - (Envios.unidades22 + Envios.unidades23+ Envios.unidades24 + Envios.unidades25 + Envios.unidades26 + Envios.unidades27 + Envios.[unidades28_+3 SEM]),
  76.     [Semana_actual+4] = [Stocks Futuros].[Semana_actual+3] + inserted.[Semana_actual+4] - (Envios.unidades29 + Envios.unidades30+ Envios.unidades31 + Envios.unidades32 + Envios.unidades33 + Envios.unidades34 + Envios.[unidades35_+4 SEM]),
  77.     [Semana_actual+5] = [Stocks Futuros].[Semana_actual+4] + inserted.[Semana_actual+5] - (Envios.unidades36 + Envios.unidades37+ Envios.unidades38 + Envios.unidades39 + Envios.unidades40 + Envios.unidades41 + Envios.[unidades42_+5 SEM]),
  78.     [Semana_actual+6] = [Stocks Futuros].[Semana_actual+5] + inserted.[Semana_actual+6] - (Envios.unidades43 + Envios.unidades44+ Envios.unidades45 + Envios.unidades46 + Envios.unidades47 + Envios.unidades48 + Envios.[unidades49_+6 SEM]),
  79.     [Semana_actual+7] = [Stocks Futuros].[Semana_actual+6] + inserted.[Semana_actual+7] - (Envios.unidades50 + Envios.unidades51+ Envios.unidades52 + Envios.unidades53 + Envios.unidades54 + Envios.unidades55 + Envios.[unidades56_+7 SEM])
  80.  
  81. FROM [Envios] INNER JOIN inserted
  82. ON [Envios].Sorten = inserted.Sorten
  83.  
  84. END IF
  85.  
  86. @i=@i+1
  87. END

y me marca este mensaje
Mens 156, Nivel 15, Estado 1, Procedimiento Stocks_futuros_Prevision_produccion, Línea 87
Sintaxis incorrecta cerca de la palabra clave 'WHILE'.

Sabeis por que?? Se os ocurre alguna otra solucion??

Muchas gracias de antemano

Raul

Última edición por gnzsoloyo; 09/07/2014 a las 08:11