TSQL Identity 用法全解

时间:2022-09-26 23:50:47

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. Q_INVOKABLE与invokeMethod用法全解

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

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

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

  8. Java main方法全解

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

  9. binary 和 varbinary 用法全解

    在SQL Server中,使用数据类型 binary(n) 和 varbinary(n) 存储二进制数据,n是指字节数量: binary(n):固定长度为 n 字节,其中 n 值从 1 到 8,000 ...

随机推荐

  1. Linux分区和挂载硬盘

    分区: [root@code-svn ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly reco ...

  2. Unable to load performance pack. Using Java I/O instead的解决办法?

    启动的时候报下面的错误: <BEA-000438> <Unable to load performance pack. Using Java I/O instead. Please ...

  3. 用python requests库写一个人人网相册爬虫

    担心人人网会黄掉,写个爬虫,把我的相册照片都下载下来.代码如下: # -*- coding: utf-8 -*- import requests import json import os def m ...

  4. BZOJ 2252 矩阵距离

    BFS. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...

  5. Tomcat的ServletAPI与Jetty的不能混用&comma;否则会出现Serlvt类无法编译

  6. &lbrack;ZOJ 1010&rsqb; Area &lpar;计算几何&rpar;

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1010 题目大意:给你n个点,问你顺次连线能否连成多边形?如果能, ...

  7. 快速编译Delphi XE3 项目工程组

    Embarcadero 做了个好事.工程组可以直接使用 MSBuild 进行编译,让发布更简单.在Bin目录中 rsvars.bat 用于设置编译的环境变量,结合使用就可以顺利进行编译. call r ...

  8. Activity启动模式图文详解

    转载自:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0520/2897.html  英文原文:Understand Android A ...

  9. IEEE 802

    IEEE 802又称为LMSC(LAN /MAN Standards Committee, 局域网/城域网标准委员会), 致力于研究局域网和城域网的物理层和MAC层中定义的服务和协议, 对应OSI网络 ...

  10. [开源]jquery-ajax-cache:快速优化页面ajax请求,使用localStorage缓存请求

    项目:jquery-ajax-cache 地址:https://github.com/WQTeam/jquery-ajax-cache     最近在项目中用到了本地缓存localStorage做数据 ...