2016-12-21 18 views
1

いくつかの質問と回答がありましたが、すべて私の問題とは異なるようです。私は実際のテーブルから別の一時テーブル上のIDにwhere句を使ってtempテーブルに挿入しようとしています。私を説明させてください別のテンポラリテーブルからの一時テーブルへの挿入エラー

ここに私の最初の挿入です。パラメータに基づいて一時テーブルを作成します

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

ある場所で 'programs_id'ではなく' proram_Id'と言いますか?データベース表属性の一貫した名前は必須です。 –

答えて

1

2番目のクエリで#programsテーブルを指定していません。その最後の行は次のように変更する必要があります。

WHERE EXISTS (SELECT TOP 1 1 FROM #Programs WHERE #Programs.programs_id = ps.program_id) 

これは一時テーブルに対処しなければならない方法です - 彼らはあなたの現在のスクリプト内の変数にはならない - 彼らはあなたが切断した後にクリーンアップされる実際のテーブルです。そのため、それらを参照する必要がある各クエリに対して、from句でテーブルとして導入する必要があります。

+0

あなたの赦しを乞うことはありますが、 'exists(select 42 from。)ではなく' TOP(TOPの 'ORDER BY' .. '?小さなテストでは、' TOP'、 'TOP'と' ORDER BY'と '42'の3つのオプションすべてについて同じ実行計画が得られました。 – HABO

+0

@JaazColeこれは正しい答えですが、主に「Exists」と「Select TOP 1 1」が私に混乱している –

+0

@HABO:存在を確認している場合は、注文する必要はありません。 @ christopher-clark:TOPは、次の行数が返された後に実行を停止するため、TOP 1は1行が終了すると実行を停止します。返されるデータはないので、定数(1)を選択することが望ましい。 hus、 'EXISTS(SELECT TOP 1 1 FROM ... ' –

0

#programsテーブルを定義するときには、タイプミスがあった - あなたはprogram_idprograms_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 
+0

残念ながら!私はそれをコピーするのはうまくやっていませんでした。私の質問を編集しました –

関連する問題