从另一个临时表插入临时表会引发错误

时间:2016-12-21 22:50:08

标签: sql tsql temp-tables

我已经看到了一些问题和答案,但它们似乎与我的问题不同。我试图插入一个临时表,其中一个实际表中的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'无法受约束。

2 个答案:

答案 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