2012-03-21 15 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 

我已經與Name, Age, Seq列的表當我插入的第一行這樣關於插入序列號的sql查詢否?

G, 30, 1 

現在我想每當我插入第二行以同樣的序列編號。 (1)在上面的行中 行應該替換爲現有的行。

像我插入G,32,1現在的現有記錄G, 30, 1應該被替換爲 G, 32, 1因爲seq。 (1)匹配。

我該如何做到這一點。我需要觸發器嗎?

注意我只想插入不更新語句。

希望我的問題很清楚,讓我知道我該如何改善這一點。

+0

你確實需要一個'update'如果要更改當前行與一個新的(或'DELETE'和'INSERT',這是什麼'UPDATE'無論如何)。在另一個說明中,如果嘗試插入一個包含具有相同'Seq'的多行的數據集會發生什麼,至少應選擇一個? – Lamak 2012-03-21 17:24:34

+0

可以使用相同的'INSERT'語句插入多個具有相同'Seq'值的記錄嗎? – MatBailie 2012-03-21 17:25:33

回答

2

如果我理解正確,你想要一個單一的語句,將插入或更新基於seqno的記錄。你可以看看使用Merge

0

它不是一個合併,數據在同一個表 你需要一個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

這假設一次只插入一條記錄 – Lamak 2012-03-21 17:38:35

+0

是的。他沒有另外提到。如有必要,它可以更新以處理多行。 – Diego 2012-03-21 17:41:55

+0

如果你喜歡那麼多,就給它一個投票:) – Diego 2012-03-22 09:26:50