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)

IDENT_CURRENT (Transact-SQL)

TSQL Identity 用法全解的更多相关文章

  1. [推荐]T- SQL性能优化详解

    [推荐]T- SQL性能优化详解 博客园上一篇好文,T-sql性能优化的 http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html

  2. CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景

    全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...

  3. T- SQL性能优化详解

    摘自:http://www.cnblogs.com/Shaina/archive/2012/04/22/2464576.html 故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册 ...

  4. T-SQL查询进阶--详解公用表表达式(CTE)

    简介 对于SELECT查询语句来说,通常情况下,为了使T-SQL代码更加简洁和可读,在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解的. 但是,视图是作为系统对象存在数据库中,那对于结果 ...

  5. Join 和 Apply 用法全解

    在关系型数据库系统中,为了满足第三范式(3NF),需要将满足“传递依赖”的表分离成单独的表,通过Join 子句将相关表进行连接,Join子句共有三种类型:外连接,内连接,交叉连接:外连接分为:left ...

  6. laravel操作Redis排序/删除/列表/随机/Hash/集合等方法全解

    Song • 3563 次浏览 • 0 个回复 • 2017年10月简介 Redis模块负责与Redis数据库交互,并提供Redis的相关API支持: Redis模块提供redis与redis.con ...

  7. Q_INVOKABLE与invokeMethod用法全解

    在Qt/Qt Quick宏浅议一文中,我们将介绍Qt中经常使用的几个宏: Q_OBJECT, SIGNAL与SLOT, Q_SIGNALS 与 Q_SLOTS, Q_EMIT ,Q_INVOKABLE ...

  8. php利用ob缓存机制实现页面静态化方法全解

    首先介绍一下php中ob缓存常用到的几个常用函数 ob_start():开启缓存机制 ob_get_contents():获取ob缓存中的内容 ob_clean()清除ob缓存中的内容,但不关闭缓存 ...

  9. Java main方法全解

    1.main方法的重载 package cn.nxl2018; public class Main_test { public static void main(String args[]) { Sy ...

随机推荐

  1. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  2. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  3. python核心编程第二版练习题答案

    2-5 #写一个while循环,输出整型为0~10 a=0while a<11: print a a+=1 #写一个for循环重复以上操作 for i in range(11): print i ...

  4. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  5. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  6. javascript之Object.defineProperty的奥妙

    直切主题 今天遇到一个这样的功能: 写一个函数,该函数传递两个参数,第一个参数为返回对象的总数据量,第二个参数为初始化对象的数据.如: var o = obj (4, {name: 'xu', age ...

  7. JavaScript自定义媒体播放器

    使用<audio>和<video>元素的play()和pause()方法,可以手工控制媒体文件的播放.组合使用属性.事件和这两个方法,很容易创建一个自定义的媒体播放器,如下面的 ...

  8. JQuery 选择器

    选择器是JQuery的根基,在JQuery中,对事件的处理,遍历DOM和AJAX操作都依赖于选择器.如果能够熟练地使用选择器,不仅能简化代码,而且还可以事半功倍. JQuery选择器的优势 1.简洁的 ...

  9. Javascript 代理模式模拟一个文件同步功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Asp.net Core 初探(发布和部署Linux)

    前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Ne ...