Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在将数据从一个表触发到另一个表时增加序列号_Sql Server_Sql Server 2005_Triggers - Fatal编程技术网

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

Sql server 如何在将数据从一个表触发到另一个表时增加序列号,sql-server,sql-server-2005,triggers,Sql Server,Sql Server 2005,Triggers,我想编写一个触发器,将表中所有插入行的某些列转移到另一个表中,同时递增目标表中序号字段中的最大值。此字段不是自动递增字段,而是主键字段 我过去所做的是在目标表中找到max sequence no,递增,然后插入新值。如果一次插入一行数据,这种方法效果很好。但是,当从单个查询中插入许多行时,如何增加序列号?问题示例如下: insert into [mssql].mssql.dbo.destination_table (name,seq_no) select name,? from inserted

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

我过去所做的是在目标表中找到max sequence no,递增,然后插入新值。如果一次插入一行数据,这种方法效果很好。但是,当从单个查询中插入许多行时,如何增加序列号?问题示例如下:

insert into [mssql].mssql.dbo.destination_table (name,seq_no)
select name,?
from inserted
甚至可以一次插入几千行


序号是复合主键的一部分。因此,例如,如果数据以不同的名称插入,序号将不同。当我可以增加seq_no而不考虑它在主键中的部分时,应该考虑这个要求。好的,我明白你的问题了,试试这个

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

请指定SQL Server的版本?另外,您能否描述一下,如果两个人试图同时插入多行,您预计会发生什么情况?请使用sql Server 2005。我希望序列号每次递增一。我认为我不必考虑到源表的多个插入,因为它的主键SQL不会允许多个插入到同一个表,直到第一个事务结束。如果我没有领会你的意思,请纠正我。为了澄清,序号将根据名称有一个单独的运行编号?例如,Bob可能在运行10、11、12等,而Mary可能在运行99、100、101?是@alextansc,这将是单独的运行编号。感谢您的回复,但有两个问题,必须增加目标表的序号,而不是源。即使我在最后一行将源表更改为目标表,它也只会向现有的max序列号添加一次。因此,所有其他插入的行都具有相同的序列号。将源表更改为目标表应该可以,因为每次插入一条记录。假设最初目的地的最大seq为5。插入一行6,如下所示。下一次插入时,max seq将是6,因此,当u insert 6+1=7每次增加1时,它将增加1,我看不出这里的问题,或者我没有弄好问题?问题是插入不是一次一行,而是很多行,有时几千行。是的,如果只有一行,这个就行了。