我正在尝试使用存储在临时结果集中的数据(代码中的SOURCE)来填充SQL Server 2012的另一个表。执行下面的代码时,我得到错误“多部分标识符”SOURCE.JnlDetoaId “不能被束缚”。
SELECT Journaldet.*, Agency.ID_Agency INTO SOURCE
FROM Journaldet
inner join Agency
ON Agency.Agency_ID = Journaldet.AgenceId
IF ((SELECT COUNT(Journal.Journal_ID) FROM dbo.Journal, SOURCE WHERE Journal_ID = SOURCE.JournalId)=0)
INSERT INTO Discarded.JournalDet(JournalDet_ID, Amount, Sensoa, DetoaId, ID_Agency, JournalId, Appli_Source, ReasonDiscarded, DateDiscarded)
VALUES (SOURCE.JnlDetoaId, SOURCE.Amount, SOURCE.Sensoa, SOURCE.DetoaId, SOURCE.ID_Agency, JournalId, 'GameApps','Member not yet inserted', GETDATE());
我在这里阅读了一些线索,但没有看到如何将它们应用到我的案例中。 有什么帮助吗?
答案 0 :(得分:2)
SELECT Journaldet.*, Agency.ID_Agency INTO sourceTable
FROM Journaldet
inner join Agency
ON Agency.Agency_ID = Journaldet.AgenceId;
IF ((SELECT COUNT(j.Journal_ID) FROM dbo.Journal as j, sourceTable s WHERE j.Journal_ID = s.JournalId) = 0)
INSERT INTO Discarded.JournalDet(JournalDet_ID, Amount, Sensoa, DetoaId,ID_Agency, JournalId, Appli_Source, ReasonDiscarded, DateDiscarded)
VALUES (select JnlDetoaId, Amount, Sensoa, DetoaId, ID_Agency, JournalId, 'GameApps','Member not yet inserted', GETDATE() FROM sourceTable)
问题在于insert()values()。 将值插入Discarded.JournalDet表。您不能只使用源表中的上述字段。您必须从源表中进行选择。
U不能只是直接使用source.JournalDet ..和soo,因为它们只是在上面定义了几行。
答案 1 :(得分:0)
以下是我解决问题的方法。根据我的意愿,在INSERT中没有看到SOURCE作为结果集。 INSERT没什么。我只是重写了查询,以便在INSERT中看到结果集。非常感谢user2919277。
INSERT INTO Discarded.JournalDet
(JournalDet_ID, Amount, Sensoa, DetoaId, ID_Agency, JournalId, Appli_Source, ReasonDiscarded, DateDiscarded)
SELECT SOURCE1.JnlDetoaId, Amount,Sensoa,DetoaId,ID_Agency,JournalId, 'GameApps', 'Member not yet inserted', GETDATE()
FROM Journaldet AS SOURCE1
inner join Agency AS SOURCE2 ON SOURCE2.Agency_ID = SOURCE1.AgenceId
WHERE ((SELECT COUNT(Journal.Journal_ID) FROM dbo.Journal WHERE dbo.Journal.Journal_ID = SOURCE1.JournalId)=0)