2011-08-03 13 views
1

私はSQL Serverのここでは2005SQL挿入-Selectステートメント

でのVisual Basic 6.0を使用するには、私のコードです:

Cn.Execute "INSERT INTO schedule (sch_name, st_id, sch_note) 
      SELECT '" & txtSchedname.Text & "', st_id, '" & txtNote.Text & "' 
      FROM scheduletype 
      WHERE st_name = '" & cboSchedtype.Text & "'" 

これは、select文の中へ挿入され、正常に動作します。 2つの入力は[schedule]テーブルに直接保存され、1つの入力は[scheduletype]テーブルから取得されます。

しかし、cboSchedtype.Textに一致するレコードがない場合はどうなりますか?ここで

SELECT st_id 
FROM scheduletype 
WHERE st_name = '" & cboSchedtype.Text & "'" 

は、私が何をしたいです:

I.は、メインの前に(それが存在しない場合にのみ、[scheduletype]テーブルにcboSchedtype.Textの値のための「副挿入」を作りますクエリを挿入することができます)

II。そうでなければ正常に続行する。 (私のコードが正常にこれを行います。)

+0

[MERGE](http://technet.microsoft.com/en-us/library/bb510625.aspx)ステートメントを使用すると思います。 – ain

+0

ああ私はSQL Server 2005を使用しています。マージは2008年の構文です。 – ELM

+0

クエリはSQLインジェクション攻撃に対して脆弱です。 –

答えて

1

が存在しない場合scheduletypeを追加するために使用します。あなたは行が存在することを知っているので、あなたがscheduleに対するあなたのINSERT文を使用することができることを行っている後

insert into scheduletype 
select 'TheScheduleType' 
where not exists (select st_name 
        from scheduletype 
        where st_name = 'TheScheduleType') 

+0

最初の例で特にSELECT文に集中しましょう。 cboSchedtype.Textに[scheduletype]テーブルで一致する値がない場合はどうなりますか? このような場合は、クエリで[scheduletype]テーブルにcboSchedtype.Textを挿入する必要があります。 ご質問は無効です。サブクエリは挿入文では使用できません。スカラ式だけが許されます。 – ELM

+0

@March - 誤解されました。私は答えを更新しました。 –

関連する問題