Sql server 在SQL Server中插入主键字段
在SELECT语句中插入一个主键的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
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,递增它并尝试插入,其中一个线程得到冲突错误。是的,您不会。如果执行,则不应并行执行。