我已经看到了一些问题和答案,但它们似乎与我的问题不同。我试图插入一个临时表,其中一个实际表中的where子句到另一个临时表上的id。让我解释一下
这是我的第一个插页。它根据参数
创建临时表Insert Into #programs (programs_id, state_program_ID, org_no, bldg_no)
Select programs_ID, state_program_ID, org_no, bldg_no
From programs as p
Where p.org_no = @org_no
And p.bldg_no = @bldg_no
And p.school_yr = @school_year
这将返回一个具有平面程序列表的表。课程在学校层面提供,并略微修改相关的state_program
。
然后我需要一份从program_student
表中获取该程序的所有学生的列表。
Insert Into #programStudent (programs_id , ss_id, status_id)
Select ps.programs_id, ps.ss_id, ps.status_id
From program_student as ps
Where ps.programs_id = #programs.program_id
--'#programs.program_id' throws error
这将符合我的需要,让所有学生在该学年完成学校提供的任何课程。
完整错误是
多部分标识符' #programs.program_id'无法受约束。
答案 0 :(得分:1)
您没有在第二个查询中处理#programs表。最后一行必须改为这样:
WHERE EXISTS (SELECT TOP 1 1 FROM #Programs WHERE #Programs.programs_id = ps.program_id)
这是你必须解决临时表的方法 - 它们不会成为当前脚本中的变量 - 它们是在断开连接后会被清理的实际表。因此,需要将它们作为表引入 - 在from子句中,用于需要引用它们的每个查询。
答案 1 :(得分:0)
您在定义#programs
表时遇到了拼写错误 - 您调用了列programs_id
而不是program_id
。只需修理它,你就可以了:
Insert Into #programs (program_id, state_program_ID, org_no, bldg_no)
-- "s" removed Here ---------^
Select programs_ID, state_program_ID, org_no, bldg_no
From programs as p
Where p.org_no = @org_no
And p.bldg_no = @bldg_no
And p.school_yr = @school_year