Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Insert multiple con While

Estas en el tema de Insert multiple con While en el foro de SQL Server en Foros del Web. Buenas a todos, Estoy intentando hacer un Insert de varias tablas a la vez y para ello tengo creado este procedimiento: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: ...
  #1 (permalink)  
Antiguo 23/12/2014, 07:57
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 10 años
Puntos: 9
Insert multiple con While

Buenas a todos,

Estoy intentando hacer un Insert de varias tablas a la vez y para ello tengo creado este procedimiento:

Código SQL:
Ver original
  1. CREATE PROCEDURE P_OfcContratosFormacion_InsertExt(
  2. @IDOficina INT,
  3. @IDACEmpresa INT,
  4. @IDACAlumno INT,
  5. @IDCFOcupacion INT,
  6. @FchInicio DATE,
  7. @FchFin DATE,
  8. @NumContrato INT,
  9. @Enviado bit,
  10. @Alta bit,
  11. @IDContratoFormacion INT OUTPUT
  12. ) AS
  13.     SET NOCOUNT ON
  14.     DECLARE @FchContrato DATE;
  15.     DECLARE @FchVariable DATE;
  16.     SET @FchContrato=@FchInicio;
  17.     SET @FchVariable=@FchContrato;
  18.     SET @FchVariable=DATEADD(YEAR, 1,@FchVariable)
  19.     SET @FchVariable=DATEADD(DAY, -1,@FchVariable)
  20.     INSERT INTO [OfcContratosFormacion]
  21.            ([IDOficina],[IDACEmpresa],[IDACAlumno],[IDCFOcupacion],[FchCambioBonificacion])
  22.      VALUES
  23.            (@IDOficina, @IDACEmpresa, @IDACAlumno, @IDCFOcupacion, @FchVariable)
  24.            
  25.      SET @IDContratoFormacion = SCOPE_IDENTITY()
  26.      IF @IDContratoFormacion IS NOT NULL
  27.         BEGIN
  28.             INSERT INTO [OfcContratosFormacion_DatosCtto]
  29.                 ([AnioContrato],[IDContratoFormacion],[FchInicio],[FchFin],[NumContrato],[Enviado], [Alta],[FchEntrada])
  30.             VALUES (0,@IDContratoFormacion, @FchInicio, @FchFin, @NumContrato, @Enviado, @Alta, GETDATE())
  31.            
  32.             INSERT INTO [OfcContratosFormacion_DatosCtto]
  33.                 ([AnioContrato],[IDContratoFormacion])
  34.             VALUES (1,@IDContratoFormacion)
  35.             INSERT INTO [OfcContratosFormacion_DatosCtto]
  36.                 ([AnioContrato],[IDContratoFormacion])
  37.             VALUES (2,@IDContratoFormacion)
  38.  
  39.            
  40.             WHILE DATEDIFF(MONTH, @FchFin, @FchContrato)>0
  41.             BEGIN
  42.                 SET @FchVariable=@FchContrato
  43.                 SET @FchVariable=DATEADD(MONTH, 2, @FchVariable)
  44.                 IF MONTH(@FchVariable)!=2
  45.                     BEGIN
  46.                         SET @FchVariable=DATEADD(DAY, 30-DAY(@FchVariable), @FchVariable)
  47.                     END
  48.                 ELSE
  49.                     BEGIN
  50.                         SET @FchVariable=DATEADD(DAY, 28-DAY(@FchVariable), @FchVariable)
  51.                     END
  52.                 INSERT INTO [OfcContratosFormacion_DatosCtto_Mes]
  53.                     ([FchContrato],[IDContratoFormacion],[FchLiquidacionSystem],[FchPagoSystem],[FchLiquidacionResto],[FchPagoResto],[Horas])
  54.                 VALUES (@FchContrato,@IDContratoFormacion,DATEADD(MONTH,2,@FchVariable),@FchContrato,@FchContrato,@FchContrato,5)
  55.                 SELECT DATEADD(MONTH, 1, @FchContrato)
  56.             END
  57.         END

Pero después de ejecutarlo me doy cuenta de que no hace el while ya que la tabla a la que apunta sigue vacía. Seguro que es una obviedad, pero no lo veo, ¿Alguien ve el fallo?

Última edición por gnzsoloyo; 23/12/2014 a las 08:10 Razón: Mal etiquetado.
  #2 (permalink)  
Antiguo 23/12/2014, 08:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Insert multiple con While

cambia esta linea:

SELECT DATEADD(MONTH, 1, @FchContrato)

por esto:

set @FchContrato=DATEADD(MONTH, 1, @FchContrato)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 23/12/2014, 09:06
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 10 años
Puntos: 9
Respuesta: Insert multiple con While

Perfecto, como siempre, ¡muchas gracias!

Etiquetas: date, datediff, insert, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:15.