如何手动插入标识?

时间:2012-09-24 10:52:03

标签: 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')

现在

Select * FROM masterTbl

结果:

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

DELETE FROM masterTbl WHERE id=1

现在

Select * FROM masterTbl

结果:

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

现在我要跑:

INSERT INTO masterTbl (id, name) VALUES (1, 'MNO')

这怎么可能?

4 个答案:

答案 0 :(得分:54)

以最简单的形式,您需要暂时允许插入身份值

SET IDENTITY_INSERT masterTbl ON
INSERT INTO masterTbl (id, name) VALUES (1, 'MNO')
SET IDENTITY_INSERT masterTbl OFF

答案 1 :(得分:12)

是的,您可以手动设置身份字段

SET IDENTITY_INSERT masterTbl ON

然后插入您的数据

INSERT INTO masterTbl (id, name) VALUES (1, 'MNO') 
......

并记得打电话

SET IDENTITY_INSERT masterTbl OFF

重新启用正确的功能

答案 2 :(得分:4)

答案 3 :(得分:0)

可以执行以下步骤:

I。启用身份插入,这将禁止SQL Server自动在表的身份列中插入值:

SET IDENTITY_INSERT ON

II。执行“手动”插入操作,并指定所有受影响的列名称:

INSERT INTO masterTbl (id, name)
VALUES (1, 'ABC',
        2, 'XYZ',
        4, 'PQR')
  • 如果您跳过列出列名,SQL Server将弹出一条错误消息。

III。完成后,通过禁用早期版本的手动插入功能来重新启用自动标识值插入:

SET IDENTITY_INSERT OFF

IV。大功告成!