如何在将数据从一个表触发到另一个表时递增序列号

时间:2012-05-03 23:13:06

标签: sql-server sql-server-2005 triggers

我想编写一个触发器,将表中所有插入行的某些列传输到另一个表,同时递增目标表中序列号字段中的最大数字。此字段不是自动增量,而是主键字段。

我以前做的是在目标表中找到最大序列号,递增然后插入新值。如果一次插入数据,这可以正常工作。但是,当从单个查询中插入许多行时,如何递增序列号?示例问题如下:

insert into [mssql].mssql.dbo.destination_table (name,seq_no)
select name,?
from inserted

甚至可以一次插入几千行。

seq_no是复合主键的一部分。因此,例如,如果以不同的名称插入数据,则seq_no将是不同的。 (当我可以增加seq_no而不考虑它在主键中的部分时,应该考虑这个要求)

1 个答案:

答案 0 :(得分:0)

好的,我遇到了你的问题,试试这个

insert into [mssql].mssql.dbo.destination_table (name,seq_no)
select name, x.MaxSeq + row_number() over (order by name)
   from inserted, (select Max(seq_no) As MaxSeq From source_table) x