SQL, Problema con unos SELECT en un INSERT

Iniciado por llAudioslavell, 10 Febrero 2012, 22:49 PM

0 Miembros y 1 Visitante están viendo este tema.

llAudioslavell

Hola a todos  ... !
Estoy creando un Procedimiento que me permita Insertar valores, pero para un campo tengo que restar 2 fechas, estas fechas se encuentran en tablas diferentes, "F_PAGO" se encuentra en la tabla PAGOS y el otro campo "F_PAGO se encuentra en la tabla PAGOS_REGISTRADOS, necesito la diferencia de estos 2 campos, que son fechas, para allar los dias de diferencias para despues multiplicarlo por 1.

CREATE PROCEDURE SP_GENERAR_MORA
AS
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO,ID_ESTUDIANTE)
VALUES('02',0,0.00,1.00,(DATEDIFF(DAY,(SELECT F_PAGO FROM PAGOS WHERE ID_CONCEPTO= 'CP-02'),( SELECT F_PAGO FROM PAGOS_REGISTRADOS WHERE ID_PAGO='P02' ))) * 1, 0,'CP-02','100545')

El SQL me muestra este error:

Mens 1046, Nivel 15, Estado 1, Procedimiento SP_GENERAR_MORA, Línea 5
No se permiten subconsultas en este contexto. Sólo se admiten expresiones escalares.
Mens 102, Nivel 15, Estado 1, Procedimiento SP_GENERAR_MORA, Línea 5
Sintaxis incorrecta cerca de ')'.

Me dijeron que si se puede hacer una consulta en un INSERT, pero nose por que me muestra este error ..... no domino mucho SQL, espero sus aportes, desde ya muchas gracias ^^
Salu2

Carloswaldo

Puedes usar variables para evitarte los dolores de cabeza de MsSQL

Código (sql) [Seleccionar]
CREATE PROCEDURE SP_GENERAR_MORA
AS
DECLARE @F_PAGO1 as datetime
DECLARE @F_PAGO2 as datetime
SELECT @F_PAGO1 = F_PAGO FROM PAGOS WHERE ID_CONCEPTO= 'CP-02'
SELECT @F_PAGO2 = F_PAGO FROM PAGOS_REGISTRADOS WHERE ID_PAGO='P02'
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO,ID_ESTUDIANTE) VALUES('02',0,0.00,1.00,DATEDIFF(DAY,@F_PAGO1,@F_PAGO2) * 1, 0,'CP-02','100545')

jrivam

solo cambia el values() por select

CREATE PROCEDURE SP_GENERAR_MORA
AS
INSERT INTO MORA(ID_MORA,NRO_BOLETA,MONTO,MORA_INICIAL,MORA_TOTAL,RESTA,ID_CONCEPTO,ID_ESTUDIANTE)
select '02',0,0.00,1.00,(DATEDIFF(DAY,(SELECT F_PAGO FROM PAGOS WHERE ID_CONCEPTO= 'CP-02'),( SELECT F_PAGO FROM PAGOS_REGISTRADOS WHERE ID_PAGO='P02' ))) * 1, 0,'CP-02','100545'