C#问题 请问 sql的自增列该怎么写?

请问sql的自增列该怎么写?... 请问 sql的自增列该怎么写? 展开
 我来答
wangzhiqing999
推荐于2016-03-01 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3330万
展开全部

SQL Server

 

通过 IDENTITY 来设置

参数有2个,一个是“初始值” 一个是“增量”。

 

默认情况下 INSERT 语句中,不能对 IDENTITY 的字段进行赋值。

 

 

对于 IDENTITY 的列 SQL Server 在 INSERT 的时候,会自动忽略掉。




 

当IDENTITY列中间的数据被删除,造成数据不连续的时候。

可以通过 SET IDENTITY_INSERT 表名 ON/OFF语句来 允许/禁止 对IDENTITY列进行显式的插入动作。

 

 

IDENTITY只能在如下情况下建立:

在创建表时创建新的IDENTITY列

在现有表中创建新的IDENTITY列

 

不能把已经存在的列,修改为IDENTITY列


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
 
(1 行受影响)
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 VALUES ('C');
4> INSERT INTO test_create_tab2 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 行受影响)
 
-- 删除一个数据,造成数据不连续.
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> SETIDENTITY_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的重置
方案一:通过truncatetable 处理
[此命令将删除表中所有的数据,使用前你需要确认你是否要做这个操作. 如果不希望修改表数据的,请采用方案二]
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行受影响)
 
 
 
查询指定表的 当前序号的数值,以及增量、与种子数值的函数
 
SELECT
 ident_current('test_create_tab2') as   序号当前数值,
 ident_incr('test_create_tab2')  as   增量,
 ident_seed('test_create_tab2')  as   种子数(起始数字)
go
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式