博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server的Identity字段使用/复制/重设
阅读量:6319 次
发布时间:2019-06-22

本文共 1870 字,大约阅读时间需要 6 分钟。

SQL Server的Identity字段使用/复制/重设

在数据库中, 常用的一个流水编号通常会使用 identity 字段来进行设置, 这种编号的好处是一定不会重复, 而且一定是唯一的, 这对table中的唯一值特性很重要, 通常用来做客户编号, 订单编号等功能, 以下介绍关于此种字段常用方式及相关技术. 
后面的范例表皆以此表为建立: 
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40)) 
more.. 
less.. 
1. 在程序中取得identity值: 
因为 identity 特性, 所以在 insert into 该 table 时, 不能指定该 identity 字段值, 仅能指定其它字段值, 而 identity 由数据库维护, 所以一般要在 insert 后取得该 identity 字段值, 则通常使用下面方式: 
insert into products (product) values ('saw') 
select @@identity 
利用全域变量 @@identity 来取得最后影响的 insert 后产生的 identity 值, 如此一来便能方便地使用 identity 字段. 
2. 若要启用识别插入(identity insert)时, 也就是如空缺号要指定 identity 字段值时, 或者是处理数据表整理或备出时, 会用到的方式: 
set identity_insert products on 
insert into products (id, product) value (3, 'screwdriver') 
要注意的地方是可以 insert 空缺号, 也可以加至最后, 但系统会自动更新 identity 至最大值, 要注意一旦启用 identity_insert 时, 就一定要给定 identity 值, 另外并不能 update 该 identity 字段值, 也就是说 identity_insert 该 identity 字段仅 for insert, 不能 update. 
3. 查询目前 identity 值: 
有时我们需要查询目前 table 中该 identity 字段最大值是多少时, 可以利用 dbcc 指令, 如下: 
dbcc checkident('product', NORESEED) 
可以获得目前最大值的结果. 
4. 重设目前最大 identity 值: 
一样利用 dbcc 指令, 如下: 
dbcc checkident('product', RESEED, 100) 
如此一来, 便能将目前的最大 identity 值指向100, 当然若故意设比目前最大值小时, 系统仍会接受, 但若 identity 遇上重复数据时(如将 identity 设为 primary key时), 将会发生重大问题, 该 table 变成无法 insert 数据, 因为会发生 primary key violation, 解决方法当然就是将目前的 identity 修复, 直接使用 
dbcc checkident('product', RESEED) 或 
dbcc checkident('product') 
(两者等义)即可顺利修复. 
5. identity 字段遇上 rollback 时: 
当 identity 字段碰到 rollback 时, 会发生跳号现象, 也就是说在 transaction 中, insert 了一笔数据, 但又 rollback 时, 该 identity 号会消失, 如下测试: 
begin tran 
insert into products (product) values ('test rollback') 
rollback tran 
dbcc checkident('product', NORESEED) 
这个观念很重要, 因为要维持 identity 特性, 但又发生 rollback, 所以系统就直接跳号处理啰, 避免发生重复编号的问题. 
identity 字段是一项很重功的功能, 若能善加利用, 相信帮助很大. 
所有的数据皆可在 sql server help 内找到, 也请多加利用.
本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/354913

转载地址:http://ovuaa.baihongyu.com/

你可能感兴趣的文章
玩转树莓派-Raspberry,控制单反相机进行可编程摄影
查看>>
RedHat6.5 linux 系统网卡常见故障
查看>>
centos源地址修改
查看>>
T线路基础知识
查看>>
nginx geoip 模块实现地区性负载均衡
查看>>
基于java的安全架构浅析
查看>>
我的友情链接
查看>>
yum源配置
查看>>
域控的虚拟化
查看>>
后序遍历求解判断一颗二叉树是否为平衡二叉树
查看>>
Linux的find指令
查看>>
PCB(进程控制块)--‘task_struct’
查看>>
C语言中模拟实现strcpy,strstr,strcat函数
查看>>
JavaScript_BOM对象
查看>>
01-Linux系统历史介绍
查看>>
LINUX下无killall命令解决方案
查看>>
Linux的历史命令重用及环境的配置文件
查看>>
LAMP+LNMP(六)用户认证、域名跳转与访问日志
查看>>
以太坊研究报告
查看>>
《数据库系统概念》19-并发控制
查看>>