Reputation: 1388
I am trying to insert some values (CIID and AID) taken from another tables, but as not an expert, I couldn't manage to do it.
Insert query :
INSERT INTO INST_ACTIVE_ACTIONS act
(act.CIID, act.AID, act.STEPNUM, act.CREATEDATE)
VALUES
(CIID , ,0,GETDATE())
The CIID Query is :
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 is :
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 and CA.AID = act.AID
Edited :
the last query is
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() )
but i get an error as
Msg 512, Level 16, State 1, Line 1 Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= ,
, >= or when the subquery is used as an expression. The statement has been terminated.
Upvotes: 0
Views: 65
Reputation: 896
Just condensed though its real busy if you ask me.
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)
Revised. tested, and working on my end. I still think if you have control on these tables you might look into the concept of Normalizing your database tables.
Upvotes: 1
Reputation: 2682
You can always perform something like this, and use as many sub queries as needed. Make sure that the types are matching on both sides.
Insert into table1 (value1, value2) Select val1,val2 from table2 ...
edit
INSERT INTO INST_ACTIVE_ACTIONS act (act.CIID, act.AID, act.STEPNUM, act.CREATEDATE) Select (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 WHERE ca.CIID =c.CIID ORDER BY TSTAMP DESC act.CIID = C.CIID = ca.CIID and CA.AID ),0,GETDATE()
Upvotes: 0