2012-03-21 14 views
1
Name,Age,Seq 

G,30,1 
G,31,1 
K,28,3 
K,29,3 
k,28,3 
V,,4 
V,28,4 

私はノーと同じ配列を有する第2行を挿入するたびに、今私が欲しいこの挿入クエリに関するSQLクエリはありませんか?

G, 30, 1 

のような最初の行を挿入したとき、私は列Name, Age, Seqを持つテーブルをしました。 (1)上の行 行は、既存の行で置き換える必要があります。

のように私はを挿入しています。G, 30, 1は、 G, 32, 1で置き換える必要があります。 (1)がマッチングされる。

どのように私はこれを達成することができます。私はトリガーが必要ですか?

注記私は挿入しない更新文が必要です。

私の質問が明確であることを願って、私はこれをもっと改善する方法を教えてください。

+0

あなたは現在の行を変更している場合は、 'update'が必要ですに挿入する必要がありますので 、あなたは、私だけではなく、このように更新を行うことができます新しいもの(あるいは、 'DELETE'と' INSERT'、 'UPDATE'がとにかく何をしているのか)を指定します。別の注意として、同じSeqを持つ複数の行を含むデータセットを挿入しようとすると、選択したものになるはずです。 – Lamak

+0

同じ 'Seq'値を持つ複数のレコードは、同じ' INSERT'ステートメントで挿入できますか? – MatBailie

答えて

2

私が正しく理解していれば、seqnoに基づいてレコードを挿入または更新する単一のステートメントが必要です。あなたはMergeを調べることができます。

0

あなたはおそらく、あなたが「アップサートを行うことが可能にする、for the MERGE statementを探しています":単一の文での挿入または更新(ロック処理にはまだ注意が必要ですが、http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx

リテラルの場合あなたはINSERTを使用したいと思っています。私は、あなたが求めていることをする方法はないと思います。

0

そのないマージは、データはあなたが私はseqが存在する場合、既存の行を削除することにしました。この場合、INSTEAD OF INSERTトリガー

が必要になり、同じテーブル です。それはあなたに合っていない場合は、常に新しい行

create trigger myTrigger 
on myTable 
instead of insert 
as 
begin 
    declare @seq int 

    select @seq = seq from inserted 
    if exists (select 1 from myTable where seq= @seq) begin 
    delete from myTable where [email protected] 
    end 
    insert into myTable 
    select * from inserted 
end 
+0

これは、一度に1つのレコードのみが挿入されたと仮定します。 – Lamak

+0

はいそうです。彼は別に言及しなかった。必要に応じて、複数の行を処理するように更新することができます。 – Diego

+0

あなたがそれほど好きだったら投票してください:) – Diego

関連する問題