如何手动插入标识?

RAK*_*KAR 28 sql sql-server sql-server-2008

CREATE TABLE masterTbl (
id INT IDENTITY(1,1) CONSTRAINT pk_id PRIMARY KEY,
name VARCHAR(100))

INSERT INTO masterTbl VALUES ('ABC', 'XYZ','PQR')
Run Code Online (Sandbox Code Playgroud)

现在

Select * FROM masterTbl
Run Code Online (Sandbox Code Playgroud)

结果:

id  | name
---------------------
1 |  ABC
2 |  XYZ
3 |  PQR

DELETE FROM masterTbl WHERE id=1
Run Code Online (Sandbox Code Playgroud)

现在

Select * FROM masterTbl
Run Code Online (Sandbox Code Playgroud)

结果:

id |  name
---------------------
2 |  XYZ
3 |  PQR
Run Code Online (Sandbox Code Playgroud)

现在我想跑:

INSERT INTO masterTbl (id, name) VALUES (1, 'MNO')
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

fre*_*ler 55

在它最简单的形式中,您需要暂时允许插入标识值

SET IDENTITY_INSERT masterTbl ON
INSERT INTO masterTbl (id, name) VALUES (1, 'MNO')
SET IDENTITY_INSERT masterTbl OFF
Run Code Online (Sandbox Code Playgroud)

  • 请注意,必须使用列列表 (2认同)
  • 执行此操作后,身份序列会发生什么变化?它是否已损坏,或者 SQL Server 是否在幕后处理此问题,以便您不必重新播种序列? (2认同)

Ste*_*eve 12

是的,您可以设置手动执行的标识字段

SET IDENTITY_INSERT masterTbl ON
Run Code Online (Sandbox Code Playgroud)

然后插入您的数据

INSERT INTO masterTbl (id, name) VALUES (1, 'MNO') 
......
Run Code Online (Sandbox Code Playgroud)

并记得打电话

SET IDENTITY_INSERT masterTbl OFF
Run Code Online (Sandbox Code Playgroud)

重新启用正确的功能