TSQL Identity 用法全解
Identity是标识值,在SQL Server中,有ID列,ID属性,ID值,ID列的值等术语。
Identity属性是指在创建Table时,为列指定的Identity属性,其语法是:column_name type IDENTITY [ (seed , increment) ],Identity属性有两个参数:seed和increment,seed是ID值的初始值,increment是ID值的增量。在Table中创建的Column,如果使用Identity属性标识,那么该列是ID列。默认情况下,不能显式向ID列插入数值。ID列是由系统自动赋值的,在赋值时,系统根据该表的ID值,自动插入递增的,唯一的数值,同时ID值根据Increment自动递增。ID值有自动递增的特性,当语句执行失败或事务回滚时,ID值不会回滚,这会导致ID列的值不连续。
如果想要显式向ID列插入特定的数值,那么,必须启用 Identity_Insert选项,该选项自动将ID值更新为ID列的最大值。
set identity_insert schema_name.table_name on
在transactional replication中,如果订阅端的ID列设置属性:not for replication,那么,当replication agent执行插入操作,该列的ID值不会增加,因此,ID列的最大值和ID值,不总是保持相同。
If this property is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts.
一,Identity函数
1,只能用于select-into子句中,新建一个含有Identity 列的数据表
IDENTITY (data_type [ , seed , increment ] ) AS column_name
2,查看ID列的Seed,Increment和当前ID值
IDENT_INCR ( 'table_or_view' )
IDENT_SEED ( 'table_or_view' )
IDENT_CURRENT( 'table_or_view' )
函数Ident_Current()用于返回指定Table的当前ID值。
二,Identity 属性
在创建(Create)或修改(Alter)Table时,为列定义Identity属性,那么该列就是ID列。被属性 Identity 标识的ID列,能够被函数$IDENTITY引用;
IDENTITY [ (seed , increment) ]
三,使用DBCC CheckIdent 查看或修改ID值
DBCC 是Database Console Commands 的简写,DBCC CheckIdent 用于查看指定Table的当前ID值,并根据需要,修改其ID值。
DBCC CHECKIDENT( table_name [, { NORESEED | { RESEED [, new_reseed_value ] } } ])
[ WITH NO_INFOMSGS ]
1,查看ID列的当前ID值
dbcc checkident('table name',noreseed)
返回的消息是:Checking identity information: current identity value '517', current column value '517'.
2,如果ID列的最大值大于ID值,将ID值修改为ID列的最大值
DBCC CHECKIDENT ( 'table_name' )
--or
DBCC CHECKIDENT ( 'table_name', RESEED )
3,将ID列的ID值修改指定的数值
DBCC CHECKIDENT ( 'table_name', RESEED, new_reseed_value )
四,查看最后一个插入的ID值
一个session含有不同的Scope,一个触发器,一个存储过程,一个batch,一个动态查询语句都是是一个scope。在一个batch中执行多个存储过程,就会产生多个作用域,@@IDENTITY返回的ID值是最后一个Scope产生的结果。如果要获取当前Scope中插入的最后一个ID值,需要使用SCOPE_IDENTITY()。
MSDN:A scope is a module: a stored procedure, trigger, function, or batch. Therefore, two statements are in the same scope if they are in the same stored procedure, function, or batch.
根据Scope的不同,有两个函数用于返回最后一个插入的ID值:
- @@IDENTITY:作用域是在当前Session中,返回最后一个插入的ID值
- SCOPE_IDENTITY():作用域是在当前的Scope中,返回最后一个插入的ID值
五,向ID列显式插入指定数值
将Identity_Insert选项设置为ON,允许向ID列插入显式数值。
SET IDENTITY_INSERT schema_name . table_name { ON | OFF }
如果插入的数值大于当前的ID值,SQL Server自动将当前的ID值设置为ID列的最大值。
If the value inserted is larger than the current identity value for the table, SQL Server automatically uses the new inserted value as the current identity value.
注意,在插入显式数值时,必须将Target Table的所有列都显式列出在Insert 子句中。
参考文档:
SET IDENTITY_INSERT (Transact-SQL)
DBCC CHECKIDENT (Transact-SQL)
TSQL Identity 用法全解的更多相关文章
- [推荐]T- SQL性能优化详解
[推荐]T- SQL性能优化详解 博客园上一篇好文,T-sql性能优化的 http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html
- CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景
全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...
- T- SQL性能优化详解
摘自:http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册 ...
- T-SQL查询进阶--详解公用表表达式(CTE)
简介 对于SELECT查询语句来说,通常情况下,为了使T-SQL代码更加简洁和可读,在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解的. 但是,视图是作为系统对象存在数据库中,那对于结果 ...
- Join 和 Apply 用法全解
在关系型数据库系统中,为了满足第三范式(3NF),需要将满足“传递依赖”的表分离成单独的表,通过Join 子句将相关表进行连接,Join子句共有三种类型:外连接,内连接,交叉连接:外连接分为:left ...
- laravel操作Redis排序/删除/列表/随机/Hash/集合等方法全解
Song • 3563 次浏览 • 0 个回复 • 2017年10月简介 Redis模块负责与Redis数据库交互,并提供Redis的相关API支持: Redis模块提供redis与redis.con ...
- Q_INVOKABLE与invokeMethod用法全解
在Qt/Qt Quick宏浅议一文中,我们将介绍Qt中经常使用的几个宏: Q_OBJECT, SIGNAL与SLOT, Q_SIGNALS 与 Q_SLOTS, Q_EMIT ,Q_INVOKABLE ...
- php利用ob缓存机制实现页面静态化方法全解
首先介绍一下php中ob缓存常用到的几个常用函数 ob_start():开启缓存机制 ob_get_contents():获取ob缓存中的内容 ob_clean()清除ob缓存中的内容,但不关闭缓存 ...
- Java main方法全解
1.main方法的重载 package cn.nxl2018; public class Main_test { public static void main(String args[]) { Sy ...
随机推荐
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- kindeditor4整合SyntaxHighlighter,让代码亮起来
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换 ...
- 如何利用pt-online-schema-change进行MySQL表的主键变更
业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键.这种需求在实际生产中还是蛮多的. 下面,看看pt-online-schema-change解决这类问题的处理方式. 首先,创建一张测 ...
- Asp.net Core 初探(发布和部署Linux)
前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Ne ...
- duang~免费的学习视频来啦:学霸君之全栈测试
学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...
- JavaScript基础知识总结(二)
JavaScript语法 二.数据类型 程序把这些量.值分为几大类,每一类分别叫什么名称,有什么特点,就叫数据类型. 1.字符串(string) 字符串由零个或多个字符构成,字符包括字母,数字,标点符 ...
- Redis简单案例(二) 网站最近的访问用户
我们有时会在网站中看到最后的访问用户.最近的活跃用户等等诸如此类的一些信息.本文就以最后的访问用户为例, 用Redis来实现这个小功能.在这之前,我们可以先简单了解一下在oracle.sqlserve ...
- JAVA FreeMarker工具类
FreeMarkerUtil.java package pers.kangxu.datautils.utils; import java.io.File; import java.io.StringW ...
- ELK分析IIS日志
LogStash.conf input { file { type => "iis_log" path => ["C:/inetpub/logs/LogF ...
- POJ2774 Long Long Message [后缀数组]
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 29277 Accepted: 11 ...