有关插入seq的SQL查询没有?

时间:2012-03-21 17:19:27

标签: sql sql-server sql-server-2008

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
G, 30, 1

现在我想要每当我插入第二行相同的seq no。 (1)在上面排    该行应替换为现有行。

就像我正在插入G,32,1一样,现在应该替换现有记录G, 30, 1    G, 32, 1因为seq。 (1)匹配。

我怎样才能做到这一点。我需要一个触发器。

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

希望我的问题很清楚,让我知道如何才能更好地改进这一点。

4 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要一个语句,它将根据seqno插入或更新记录。您可以考虑使用Merge

答案 1 :(得分:0)

使用merge语句。可以在这里找到一个很好的参考:

http://technet.microsoft.com/en-us/library/bb510625.aspx

可以在这里找到一个例子

http://technet.microsoft.com/en-us/library/bb522522.aspx

答案 2 :(得分:0)

您可能正在查找for the MERGE statement,这使您可以执行“Upsert”:在单个语句中插入或更新(尽管您仍需要对锁处理略微小心,请参阅{{3} }

如果您真的想使用INSERT,我认为没有办法按照您的要求行事。

答案 3 :(得分:0)

它不是合并,数据在同一个表上 你需要一个INSTEAD OF INSERT触发器

在这种情况下,如果seq存在,我选择删除现有行。 如果它不适合你,你可以做一个更新,我只是这样,因为你总是要插入新行

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 seq=@seq
  end
  insert into myTable
  select * from inserted
end