Sql server 在SQL Server中插入主键字段

Sql server 在SQL Server中插入主键字段,sql-server,sql-server-2012,Sql Server,Sql Server 2012,在SELECT语句中插入一个主键的ID字段,是否有方法递增该字段 我想做的是取表的最后一个ID,插入一个递增的ID,每个新记录都由insert-INTO-SELECT语句生成。可能会得到最大ID,然后在每次插入时递增一个 INSERT MAX(ID)+1 您可以这样做: DECLARE @lastId int = 0 SELECT @lastId = MAX(Id) From YourTable INSERT INTO YourTable (Id, Data) SELECT (ROW_NU

在SELECT语句中插入一个主键的
ID
字段,是否有方法递增该字段

我想做的是取表的最后一个
ID
,插入一个递增的
ID
,每个新记录都由
insert-INTO-SELECT
语句生成。

可能会得到最大ID,然后在每次插入时递增一个

INSERT MAX(ID)+1

您可以这样做:

DECLARE @lastId int = 0
SELECT @lastId = MAX(Id) From YourTable 

INSERT INTO YourTable (Id, Data)
SELECT (ROW_NUMBER() OVER (ORDER BY (SELECT 0))) + @lastId, at.Data
FROM AnotherTable at
确保将其添加到事务范围内

SqlFiddle:


无论如何,我强烈建议您使用标识栏以避免冲突。

我认为您正在寻找类似的内容。为了演示的目的,我们假设PK是一个INT

--Get the last/greatest PK value in first table.
DECLARE @LastPKValue INT
SELECT @LastPKValue = MAX(PKCol)
FROM [schema].[YourTable]

INSERT INTO [schema].[YourTable] (PKCol, ColA, ColB, ColC)
SELECT 
    ROW_NUMBER()  OVER( ORDER BY sot.[SomeColumnName]) + @LastPKValue, 
    OtherColumnA, 
    OtherColumnB, 
    OtherColumnC
FROM [schema].[SomeOtherTable] sot

你能再清楚一点你想做什么吗?我不确定您所说的是标识列还是可以/应该使用Sequentialid或使用post insert标识变量的内容。您的ID字段是标识吗?如果是这样,这将自动完成。不幸的是,由于其他限制,身份对我来说不起作用。谢谢。我不确定你的问题是否清楚!是否希望在执行“插入”操作时,新id的值与母表中的值相同?id字段不是标识字段,不能是由于其他约束,但它在id字段上有主键约束。我想做的是从表B中获取数据并插入到表A中。但是,由于ID列上的PK,我需要有一个ID值并维护ID顺序。您需要在哪个位置运行才能使此工作正常?如果是一个重复作业,我至少会说READ_COMMITTED。@VitorTyburski是的,但您不会受到冲突的保护。两个线程都读取提交的最后一个id,递增它并尝试插入,其中一个线程得到冲突错误。是的,您不会。如果执行,则不应并行执行。