学习笔记:数据库的IDENTITY

IDENTITY,就是Sql Server中的“标识”列,Access中的自动编号,不过这篇文章主要讨论的都是sql Server中的内容。

主要包括:

一、获取刚刚添加的那条记录的IDENTIT值(通常都是为了获取编号)

二、重设IDENTITY列的新值

一、获取刚刚添加的那条记录的IDENTIT值(通常都是为了获取编号)

1、下面这段来自于SQL SERVER 2000的联机丛书

IDENT_CURRENT 类似于 Microsoft® SQL Server™ 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。

这三个函数都返回最后生成的标识值。

但是,它们在定义"最后"的作用域和会话上不同。

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。

@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。

SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。

2、下面这段来自于我今天的亲身体会

今天的情况首先是添加餐馆后,无论如何都不能获得刚刚生成的identity,后来又莫名其妙的好用了。

天知道是怎么回事!

然后是添加餐馆之后获取的identity和实际的值不匹配。

后来想起,添加餐馆的时候,后自动为这外餐馆生成“肉菜”、“酒水”等5个默认的分类。

所以添加完餐馆后,通过SCOPE_IDENTITY 获取的identiy实际上是分类的ID。后来改成SELECT IDENT_CURRENT('Restaurant')解决问题。

二、重设IDENTITY列的新值

这部分是参考了一篇博客:

重设标识列(identity)种子 (http://www.cnblogs.com/Echang/articles/1115166.html)

文章中提到的是,将表里面的数据清空,然后恢复identity从1开始。

我接着试验了数据没有完全清空的情况。

假设删除一些记录之后,现有的记录是 2 3 5 8,新的将从20开始 ,那么运行之后 DBCC CHECKIDENT (MyTable, RESEED, 1) GO 提示“检查标识信息: 当前标识值 '20',当前列值 '1'。

再次添加,就出来Identity为1的记录。

继续添加,就会报错,这时是2,再添加,还报错,再添加就变成4了。

再添加,再报错(5),再添加,出来6、7、再添加,又出错。

再添加出来9,10,就开始正常了。

结果,让我感觉系统还是很“笨”的,我原本以为那个1,可以让identity从8+1=9开始呢。

结果,出了几回错,竟然把空缺的给补满了。

结论,如果表里还有记录,就不要DBCC CHECKIDENT (MyTable, RESEED, 1)从1开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值