参考:深入了解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)的不连续与强行插入、计算列的更多相关文章

  1. <转>SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY

    MSDN对官方解释:这三个函数都返回最后生成的标识值. 但是,上述每个函数中定义的“最后”的作用域和会话有所不同. 1.IDENT_CURRENT 返回为某个会话和当前作用域中的指定表生成的最新标识值 ...

  2. sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

    原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表 ...

  3. Shell【常用知识总结】

    一.常用知识总结 1.特殊变量($0,@,#,*,?) $0:当前脚本的文件名. $n:n是一个数字,表示第几个参数. $#:传递给脚本或函数的参数个数. $*:传递给脚本或函数的所有参数.当被双引号 ...

  4. SQLSERVER:大容量导入数据时保留标识值 (SQL Server)

    从MSDN上看到实现大容量导入数据时保留标识值得方法包含三种: MSDN链接地址为:https://msdn.microsoft.com/zh-cn/library/ms178129.aspx 感觉M ...

  5. javascript常用知识点集

    javascript常用知识点集 目录结构 一.jquery源码中常见知识点 二.javascript中原型链常见的知识点 三.常用的方法集知识点 一.jquery源码中常见的知识点 1.string ...

  6. Python数据分析与挖掘所需的Pandas常用知识

    Python数据分析与挖掘所需的Pandas常用知识 前言Pandas基于两种数据类型:series与dataframe.一个series是一个一维的数据类型,其中每一个元素都有一个标签.series ...

  7. Oracle常用知识小总结

    永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...

  8. php常用知识集锦

    php常用知识集锦 很多位置都有写好的代码,自己做项目的时候可以直接拿来用,而不用自己写,比如现在看到的菜鸟教程. 1.判断是否为空 empty($_POST["name"]) 2 ...

  9. javascript常用知识汇总

    javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...

随机推荐

  1. qt中的菜单QMenu QAction

    Qt中要建立菜单,有三个类很重要: QMenuBar(QWidget * parent = 0) QMenu(QWidget * parent = 0) QMenu(const QString &am ...

  2. jQuery && jEasyUI 扩展功能集合

    jquery-extensions:jQuery && jEasyUI 扩展功能集合 该扩展功能基于 jQuery 1.9.x / 1.10.x / 1.11.x 和 jQuery E ...

  3. The Properties of Posterior of Topic Model

    1.Tang, Jian, et al. "Understanding the Limiting Factors of Topic Modeling via Posterior Contra ...

  4. java---springMVC与strutsMVC的区别

    spring mvc与struts的区别 标签: strutsspringmvcservletactiontomcat 2011-11-24 17:34 24205人阅读 评论(6) 收藏 举报  分 ...

  5. php -- 文件操作(创建、复制、移动、删除)

    创建 文件夹 bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $con ...

  6. 【NOIP模拟题】行动!行动!(spfa+优化)

    spfa不加优化果断tle最后一个点................... 这题和ch的一题很像,只不过这题简单点,这是一个层次图,即有很多个相同的图,这些相同的图之间又存在着练习.. 然后每一次队列 ...

  7. PHP curl_setopt函数用法介绍中篇

    此篇已实例为主. 一.一般的实例 demo1.php <?php $user = "admin123"; $pass = "admin456"; // $ ...

  8. MathType中如何快速输入空心字母

    MathType输入数学公式时非常方便有效的,在文档中涉及到数学公式或者符号时都是使用MathType来进行的,因为它比Office自带的公式编辑器功能更为完善,使用起来更快捷.在数学公式中,在不同的 ...

  9. python之简单的get和post请求

    1.json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. ...

  10. 通过chrome浏览器调试手机页面(IOS和Android)

    开发PC页面的时候使用chrome浏览器的开发者工具,可以很容易的捕获到页面的dom元素,并且可以修改样式,方便调试,但是手机上却很麻烦,因为手机上没有办法直接打开开发者工具查看元素.其实可以通过将设 ...