Estoy tratando de insertar algunos valores (CIID y AID) tomados de otras tablas, pero como no soy un experto, no pude hacerlo.

Insertar consulta:

INSERT INTO INST_ACTIVE_ACTIONS act 
   (act.CIID, act.AID, act.STEPNUM, act.CREATEDATE) 
VALUES 
   (CIID , ,0,GETDATE())

La consulta CIID es:

SELECT  C.CIID FROM INST_COURSE C 
LEFT JOIN INST_ACTIVE_ACTIONS AA ON (AA.CIID = C.CIID)
LEFT JOIN INST_TASKS T ON (T.CIID = C.CIID) 
LEFT JOIN SYS_SCH_ACTION SCH ON (SCH.CIID = C.CIID)
LEFT JOIN SYS_SUB_STACK SUB ON (SUB.RETURN_CIID=C.CIID)
WHERE C.COMPLETED IS NULL AND AA.AID IS NULL AND T.AID IS NULL AND SCH.AID IS NULL AND SUB.RETURN_AID IS NULL

AID Query es:

SELECT TOP 1 ca.AID 
FROM INST_COMPLETE_ACTIONS CA 
  INNER JOIN TMPL_ACT_MASTER TAM ON CA.AID=TAM.AID  
WHERE ca.CIID =c.CIID  ORDER BY TSTAMP DESC

act.CIID = C.CIID = ca.CIID y CA.AID = act.AID

Editado:

La última consulta es

 INSERT INTO INST_ACTIVE_ACTIONS  (CIID,AID,stepnum,CREATEDATE
            )

            VALUES

       (
                 (SELECT    c.CIID
                 FROM      INST_COURSE  C
                 LEFT JOIN INST_ACTIVE_ACTIONS AA
                 ON        (
                                     aa.CIID = c.CIID)
                 LEFT JOIN INST_TASKS T
                 ON        (
                                     t.CIID = c.CIID)
                 LEFT JOIN SYS_SCH_ACTION SCH
                 ON        (
                                     sch.CIID = c.CIID)
                 LEFT JOIN sys_sub_stack SUB
                 ON        (
                                     sub.RETURN_CIID = c.CIID)
                 WHERE     c.completed IS NULL
                 AND       aa.AID IS NULL
                 AND       t.AID IS NULL
                 AND       sch.AID IS NULL
                 AND       sub.return_AID IS NULL),
       (
                  SELECT TOP 1
                             ca.AID
                  FROM       INST_COMPLETE_ACTIONS CA
                  INNER JOIN tmpl_act_master TAM
                  ON         ca.AID=tam.AID

                  ORDER BY   tstamp DESC 
                  ),
       0,
       Getdate() )

Pero me sale un error como

Mensaje 512, Nivel 16, Estado 1, Línea 1 La subconsulta devolvió más de 1 valor. Esto no está permitido cuando la subconsulta sigue =,! =, <, <=,

,> = o cuando la subconsulta se usa como expresión. La declaración ha sido cancelada.

0
Umut K 26 ene. 2017 a las 16:57

2 respuestas

La mejor respuesta

Solo condensada aunque está muy ocupada si me preguntas.

INSERT INTO INST_ACTIVE_ACTIONS  
(CIID, AID, STEPNUM, CREATEDATE) 
--OUTPUT INSERTED.* --if you want to see what was inserted uncomment this 
(SELECT  C.CIID,
    (SELECT TOP 1 CA.AID 
        FROM INST_COMPLETE_ACTIONS CA 
        INNER JOIN TMPL_ACT_MASTER TAM ON CA.AID=TAM.AID  
        WHERE CA.CIID =C.CIID  ORDER BY TSTAMP DESC)
        , 0,GETDATE())
FROM INST_COURSE C 
LEFT JOIN INST_ACTIVE_ACTIONS AA ON (AA.CIID = C.CIID)
LEFT JOIN INST_TASKS T ON (T.CIID = C.CIID) 
LEFT JOIN SYS_SCH_ACTION SCH ON (SCH.CIID = C.CIID)
LEFT JOIN SYS_SUB_STACK SUB ON (SUB.RETURN_CIID=C.CIID)
WHERE C.COMPLETED IS NULL AND AA.AID IS NULL AND T.AID IS NULL AND SCH.AID IS NULL AND SUB.RETURN_AID IS NULL)

Revisado. probado y trabajando en mi extremo. Sigo pensando que si tiene control sobre estas tablas, podría examinar el concepto de Normalización de las tablas de su base de datos.

1
Edward 28 ene. 2017 a las 01:53

Siempre puede realizar algo como esto y utilizar tantas subconsultas como sea necesario. Asegúrese de que los tipos coincidan en ambos lados.

Insert into table1 (value1, value2) Select val1,val2 from table2 ...

editar

INSERTAR EN INST_ACTIVE_ACTIONS act (act.CIID, act.AID, act.STEPNUM, act.CREATEDATE) Seleccione (SELECCIONAR C.CIID DE INST_COURSE C LEFT JOIN INST_ACTIVE_ACTIONS AA ON (AA.CIID = C.CIID) LEFT JOIN INST_TASKS T ON ( T.CIID = C.CIID) IZQUIERDA UNIR SYS_SCH_ACTION SCH ON (SCH.CIID = C.CIID) IZQUIERDA UNIR SYS_SUB_STACK SUB ON (SUB.RETURN_CIID = C.CIID) DONDE C.COMPLETADO ES NULO Y AA.AID ES NULO Y T .AID ES NULL Y SCH.AID ES NULL Y SUB.RETURN_AID IS NULL), (SELECCIONE TOP 1 ca.AID DESDE INST_COMPLETE_ACTIONS CA INNER ÚNETE TMPL_ACT_MASTER TAM EN CA.AID = TAM.AID DONDE ca.CIID = c.CIID ORDER BY TSTAMP DESC act.CIID = C.CIID = ca.CIID y CA.AID), 0, GETDATE ()

0
InGeek 27 ene. 2017 a las 07:17