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