入力データテーブルからルールに違反しているデータをアラームテーブルにinsertし、アラームテーブルにあるデータと合致するものを入力データテーブルから削除すると言うのは良くある処理だと思います。備忘録としてポイントになる事をまとめます。
やりたい事
同一DB内に同一ののデータ構造を持つ2つのテーブル、dbo.T_テーブル と dbo.T_アラームリストがある
主キーとして ID [int] IDENTITY(1,1) NOT NULL を持っている
- カラム名 TEXT1 が NULL のデータを dbo.T_テーブル から dbo.T_アラームリスト にコピーを取る
- dbo.T_アラームリストにある ID と合致するデータを全て dbo.T_テーブル から削除する
SQL文で書いてみる
- INSERT INTO T_アラームリスト SELECT * FROM T_テーブル WHERE TEXT1 IS NULL
- DELETE FROM T_テーブル WHERE ID IN (SELECT DISTINCT ID FROM T_アラームリスト)
ポイント
WHERE の対象に IN句+サブクエリを使うとそのサブクエリの計算結果を全て WHERE句の対象にする事ができます。
レコードセット.EOF までループを回すより、ADODB.Commandを使った方が高速に処理ができますので用途の1つとして覚えておくと役に立ちます。
この記事へのコメントはありません。