主键的SQL计算(自动递增)

主键的SQL计算(自动递增),sql,sql-server,primary-key,auto-increment,Sql,Sql Server,Primary Key,Auto Increment,假设我有一个空表“表1”。然后我使用 SET IDENTITY_INSERT TABLE_1 ON 插入一些数据(包括主键) 之后,我停用IDENTITY\u INSERT,并希望插入其他值(默认方式,即不使用主键)。SQL如何计算新的主键值?是不是有点像: MAX(ID) + 1 提前感谢 Eugen我做了一些测试: CREATE TABLE tmp.test ( ID INT IDENTITY PRIMARY KEY, val NVARCHAR(255) ) INSE

假设我有一个空表“
表1
”。然后我使用

 SET IDENTITY_INSERT TABLE_1 ON
插入一些数据(包括主键)

之后,我停用
IDENTITY\u INSERT
,并希望插入其他值(默认方式,即不使用主键)。
SQL
如何计算新的主键值?是不是有点像:

MAX(ID) + 1
提前感谢

Eugen

我做了一些测试:

CREATE TABLE tmp.test (
    ID INT IDENTITY PRIMARY KEY,
    val NVARCHAR(255)
)

INSERT INTO tmp.test (val) values ('run_1.1')

SET IDENTITY_INSERT tmp.test ON
INSERT INTO tmp.test (ID, val) values
(112, 'run_2.1'), (2, 'run_2.2'), (45, 'run_2.3')
SET IDENTITY_INSERT tmp.test OFF

INSERT INTO tmp.test (val) values ('run_3.1'), ('run_3.2')

select * from tmp.test
结果是:

ID  val
1   run_1.1
2   run_2.2
45  run_2.3
112 run_2.1
113 run_3.1
114 run_3.2
这意味着,不需要重新设定种子:-),这很好


备注:我使用的是SQL Server 2008

摘自SQL Server文档:


如果插入的值大于表的当前标识值,SQL Server会自动使用新插入的值作为当前标识值。

比这复杂得多!不要使用这个
MAX()+1
方法来解决您自己的问题-它不是并发安全的,您最终会得到重复的!这个问题似乎离题了,因为它涉及一个您应该担心的内部实现细节。通常,当有人问这样的问题时,他们是在问一个问题的感知解决方案的一些细节。你最好告诉我们你要解决的实际问题。很高兴知道。刚刚学到了一些新东西!