SQL Server 通过IDENTITY 来设置 参数有2个,一个是“初始值”一个是“增量”。
1> CREATE TABLE test_create_tab2 ( 2> id INT IDENTITY(1, 1) PRIMARY KEY, 3> val VARCHAR(10) 4> ); 5> go
1> INSERT INTO test_create_tab2(val) VALUES ('NO id'); 2> go
默认情况下INSERT语句中,不能对IDENTITY 的字段进行赋值。
1> INSERT INTO test_create_tab2(id, val) VALUES (6, 'id no use'); 2> go 消息544,级别16,状态1,服务器HOME-BED592453C\SQLEXPRESS,第1行 当IDENTITY_INSERT设置为OFF时,不能为表'test_create_tab2'中的标识列插入显式值。
1> INSERT INTO test_create_tab2(val) VALUES ('A'); 2> INSERT INTO test_create_tab2(val) VALUES ('B'); 3> INSERT INTO test_create_tab2(val) VALUES ('C'); 4> INSERT INTO test_create_tab2(val) VALUES ('D'); 5> go
1> SELECT * FROM test_create_tab2; 2> go id val ----------- ---------- 1 NO id 2 A 3 B 4 C 5 D
(5行受影响)
当IDENTITY列中间的数据被删除,造成数据不连续的时候。 可以通过SET IDENTITY_INSERT 表名ON/OFF语句来允许/禁止对IDENTITY列进行显式的插入动作。
--删除一个数据,造成数据不连续. 1> DELETE FROM test_create_tab2 WHERE id = 3; 2> go
(1行受影响)
--允许将显式值插入表的标识列中 1> SET IDENTITY_INSERT test_create_tab2 ON 2> go 1> INSERT INTO test_create_tab2(id, val) VALUES (3, 'id is use'); 2> go
(1行受影响)
--不允许将显式值插入表的标识列中 1> SET IDENTITY_INSERT test_create_tab2 OFF 2> go 1> SELECT * FROM test_create_tab2; 2> go id val ----------- ---------- 1 NO id 2 A 3 id is use 4 C 5 D
(5 行受影响)
IDENTITY的重置 方案一:通过truncate table 处理 [此命令将删除表中所有的数据,使用前你需要确认你是否要做这个操作. 如果不希望修改表数据的,请采用方案二] 1> truncate table test_create_tab2; 2> go 1> INSERT INTO test_create_tab2(val) VALUES ('NO id'); 2> go
(1行受影响) 1> select * from test_create_tab2; 2> go id val ----------- ---------- 1 NO id
(1行受影响)
方案二:使用DBCC 1> select * from test_create_tab2; 2> go id val ----------- ---------- 2 NO id
(1行受影响) 1> delete from test_create_tab2; 2> go
(1行受影响)
查看当前ID。 1> DBCC CHECKIDENT('test_create_tab2', NORESEED) 2> go 检查标识信息:当前标识值'2',当前列值'2'。 DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。
重置ID 1> DBCC CHECKIDENT('test_create_tab2', RESEED, 100) 2> go 检查标识信息:当前标识值'2',当前列值'100'。 DBCC执行完毕。如果DBCC输出了错误信息,请与系统管理员联系。 1> INSERT INTO test_create_tab2(val) VALUES ('NO id'); 2> go
(1行受影响) 1> select * from test_create_tab2; 2> go id val ----------- ---------- 101 NO id
(1行受影响)
IDENTITY只能在如下情况下建立: 在创建表时创建新的IDENTITY列 在现有表中创建新的IDENTITY列 不能 把已经存在的列,修改为IDENTITY列 |