【发布时间】:2016-04-22 05:49:27
【问题描述】:
我有以下疑问:
Insert into cet_database.dbo.termData
(
termID,
studentID,
course,
[current],
program,
StbyCurrentClassID,
class,
classCode,
cancelled
)
Select
fm_stg.classByStudent_termData_assessmentData.termID,
fm_stg.classByStudent_termData_assessmentData.studentID,
fm_stg.classByStudent_termData_assessmentData.class_code,
case when fm_stg.classByStudent_termData_assessmentData.[current] = 'Yes' then 1 else 0 end,
fm_stg.classByStudent_termData_assessmentData.program,
fm_stg.classByStudent_termData_assessmentData.classByStudentID,
fm_stg.classByStudent_termData_assessmentData.class,
fm_stg.classByStudent_termData_assessmentData.classID,
case when fm_stg.classByStudent_termData_assessmentData.cancelled_flag = 1 then 1 else 0 end
From fm_stg.classByStudent_termData_assessmentData left outer join termData
On fm_stg.classByStudent_termData_assessmentData.class_code = termData.course
and fm_stg.classByStudent_termData_assessmentData.termID = termData.termID
and fm_stg.classByStudent_termData_assessmentData.studentID = fm_stg.classByStudent_termData_assessmentData.studentID
Where termData.StbyCurrentClassID is null
在将数据导入我的数据库表之前,我使用该查询将数据从另一个数据库 (fm_stg.classByStudent_termData_assessmentData) 导入临时表。此特定查询是一个更大的存储过程的一部分,该存储过程将数据导入到与termData 相关的多个表中。
当我运行存储过程时,我将记录插入fm_stg.classByStudent_termData_assessmentData,但没有插入termData。遇到此问题时,我只插入一条记录,但它适用于我之前所做的 10,000 条记录。我使用左连接来确定数据库表中已经存在的内容和不存在的内容,然后从临时表中获取相关记录。但是,有了这个记录:
316a, 39520, DEC 10, Yes, DEC10, 105713, DEC 10 (18), 6078, NULL, 2
选择不返回任何内容 - 这是为什么呢?我的termData 表中肯定不存在该记录,并且记录从暂存表插入到我的所有其他表中。 sproc 运行事务中的所有插入操作,以避免出现这种情况,即在某些表中插入记录而不在其他表中插入记录,但它似乎不起作用。
【问题讨论】:
-
嗯,没有得到记录的唯一原因应该是
WHERE子句。删除它并运行更改后的选择查询以查看您意外得到的结果。 -
你能创建一个重现问题的 SQL Fiddle 吗?我认为查询没有任何问题。
-
@TabAlleman 我尝试在 SQL Fiddle 中创建它(我以前没有使用过),但我一生都无法让它做任何事情,例如创建一个表。编辑:它似乎在 Firefox 中不起作用......将创建一个演示。
-
@ThorstenKettner 如果我去掉 where 子句,我会得到 666 条相同的记录。
-
好的,我确定您看到的记录有一个 termID 和 class_code 已经在表中,因此不会插入记录。
标签: sql sql-server database join