(3.9)常用知识-标识值(identity)的不连续与强行插入、计算列
参考:深入了解identity
参考:深入了解计算列
概念:标识值 identity(begin,add_number) 是一种特殊的值,依赖于列,由sql server自动维护,是自增的,而且一般是不会重复的。但是sql server并不维护标识(identity)值的唯一(要保证其唯一需在使用列上添加主键或唯一约束),也不维护标识值的连续。
0、查看表是否有标识列
- select * from db_tank.sys.columns
- where object_id=object_id('sys_users_detail')
- AND is_identity=1
1、标识值不连续
(1)当事务回滚的时候
- --构建测试表
- create table test_1(id int identity(1,1) ,col int)
- GO
- --构建测试数据
- insert into test_1(col) values(101),(102),(103)
- --事务回滚
- begin tran a
- insert into test_1(col) values(104),(105),(106)
- rollback tran a
- --再次插入
- insert into test_1(col) values(107),(108),(109)
- --验证
- select * from test_1
- 结果如下:
(2)删除记录
无论被删除的标识值是最新添加的还是以前添加的,标识值均不会再回收利用,这里就不演示了。
(3)使用dbcc checkident重置标识值
- --现有数据
- select * from test_1
- --重置标识值
- dbcc checkident(test_1,reseed,1)
- --插入测试数据
- insert into test_1(col) values(110),(111),(112)
- --验证标识值
- select * from test_1
- 结果如下:
- 现有数据~ 验证标识值数据
2、identity强行插入
由于sql server不维护标识值的唯一,因此在没有主键、唯一约束等情况下,标识值可能会重复。
(1)使用 set identity_insert tableNmae on 强行插入标识值 (注意,用这种办法插入时,一定要写列名 而不是*)
(2)使用dbcc checkident重置标识~~1的(3)中已经描述过操作,这里不再赘述
3、在select into 中构造identity列
select 1 as id,2 as num,identity(int,1,1) rn into #temp1
4、删除列的identity属性
- --如何用sql语句去掉列的自增长(identity)
- --**无法通过alter把现有自增字段改为非自增
- --比如alter table a alter id int,自增属性不会去掉
- --通过修改系统表可以做到(此法可能有不可预知的结果,慎之...)
- sp_configure 'allow updates ', 1
- GO
- reconfigure with override
- GO
- update syscolumns set colstat = colstat & 0x0000
- where id=object_id( '表名 ') and name= '字段名 '
- GO
- sp_configure 'allow updates ', 0
- ---------------------------------------------
- --折中的办法
- alter table a add xxx int
- update a set xxx=id
- alter table a drop column id
- exec sp_rename 'xxx ', 'id ', 'column '
5、计算列
- CREATE TABLE #t
- (
- x INT ,
- y INT ,
- z AS x+y
- )
- INSERT INTO #T VALUES(,);
- INSERT INTO #T VALUES(,);
- INSERT INTO #T VALUES(,);
- INSERT INTO #T VALUES(,);
- INSERT INTO #T VALUES(,);
- SELECT * FROM #T
- DROP TABLE #t
来一个比较实际的需求:弄一个日期加两位数流水号的自动编号
CREATE TABLE #t
(
id INT IDENTITY(1,1) ,
aa DATETIME DEFAULT GETDATE(),
new_id AS CONVERT(VARCHAR(20),GETDATE(),112)+'_'+RIGHT('0000000'+CAST(id AS VARCHAR(200)),3),
x INT
)
INSERT INTO #t (X) VALUES(1);
INSERT INTO #t (X) VALUES(1);
INSERT INTO #t (X) VALUES(1);
INSERT INTO #t (X) VALUES(1);
SELECT * FROM #T
DROP TABLE #T
(3.9)常用知识-标识值(identity)的不连续与强行插入、计算列的更多相关文章
- <转>SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY
MSDN对官方解释:这三个函数都返回最后生成的标识值. 但是,上述每个函数中定义的“最后”的作用域和会话有所不同. 1.IDENT_CURRENT 返回为某个会话和当前作用域中的指定表生成的最新标识值 ...
- sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别
原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表 ...
- Shell【常用知识总结】
一.常用知识总结 1.特殊变量($0,@,#,*,?) $0:当前脚本的文件名. $n:n是一个数字,表示第几个参数. $#:传递给脚本或函数的参数个数. $*:传递给脚本或函数的所有参数.当被双引号 ...
- SQLSERVER:大容量导入数据时保留标识值 (SQL Server)
从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...
- javascript常用知识点集
javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...
- Python数据分析与挖掘所需的Pandas常用知识
Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...
- Oracle常用知识小总结
永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...
- php常用知识集锦
php常用知识集锦 很多位置都有写好的代码,自己做项目的时候可以直接拿来用,而不用自己写,比如现在看到的菜鸟教程. 1.判断是否为空 empty($_POST["name"]) 2 ...
- javascript常用知识汇总
javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...
随机推荐
- [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...
- 关于js中__proto__和prototype的一些理解<转>
var Person = function(name) { this.name = name; } var p = new Person(); new操作符的操作是 var p = {} p. ...
- Android——Activity生命周期(转)
Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细 ...
- [Java] 一种好的JAVA分页实现
喃都不说了,贴代码,意思都在代码里面了 Page.java //分页类.定义分页字段信息,供前台页面使用 package com.core.common; import java.util.List; ...
- WebService的初级学习
复习准备 1. Schema约束: 1.1 namespace相当于Schema文件的id: 1.2 targetNamespace属性用来指定schema文件的namespace的值; 1. ...
- 在CentOS上安装Java环境
如何使用yum方式在CentOS上安装Java环境,系统以CentOS6.4为例. 工具/原料 Java JDK yum库 CentOS6.4 方法/步骤 1 查看CentOS自带JDK是否已安装. ...
- 移动ChemDraw结构有什么方法
ChemDraw软件是一款比较常见的化学绘图软件,化学专业的领域的人常常会用到它.本教程主要是针对新手用户,让其了解一些ChemDraw的一些基本操作,以便其能尽快上手早日用到工作中.下面我们就来给大 ...
- Ubantu apt source 国内
位置 /etc/apt/sources.list apt-get update deb http://mirrors.163.com/ubuntu/ precise main restricted u ...
- jquery做简单特效
1.点击触发消失效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- vue-router scrollBehavior无效的问题
在使用vue做单页面应用开发时候 使用vue-router作为路由控制器 在使用过程中发现每个页面打开都在原来的位置 不能返回到页面顶部位置 ,然后查看api文档 滚动行为 发现如下代码: con ...