0

我正在尝试使用存储在临时结果集中的数据(代码中的 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());

我在这里阅读了一些主题,但没有看到如何将它们应用于我的案例。请问有什么帮助吗?

4

2 回答 2

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)

问题在于您插入()值()。将值插入 Discarded.JournalDet 表。您不能只使用源表中的上述字段。您必须从源表中进行选择。

你不能直接使用 source.JournalDet .. 等等,只是因为它们是在上面几行定义的。

于 2013-10-30T13:23:02.520 回答
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)
于 2013-10-30T16:53:12.980 回答