zoukankan      html  css  js  c++  java
  • SQL identity

    SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便。有时候你可能想知道当前的种子,而不是想重设种子,这时你就要用到NORESEED,而不用再去顾忌第三个参数……

    AD:

    SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便。但它有时还会带来一些麻烦。

    示例一:当表中被删除了某些数据的时候,自增长列的编号就不再是一个连线的数列。这种时候我们可以用以下方案来解决。

    SET IDENTITY_INSERT [TABLE] [ON|OFF]

    允许将显式值插入表的标识列中,当设置为ON时,这时可能在INSERT操作时手工指定插入到标识列中的编号,同时必须在操作完成后,将IDENTITY_INSERT还原成OFF,否则下次插入的时候必须指定编号,那不然就无法完成INSERT操作。

    示例二:当表中的记录被全部删除,但此时标识列的值越来越大的时候,如果不加以重置,它还会无休止的增长。这个时候我们就要用到:

    DBCC CHECKIDENT(TABLE, [RESEED|NORESEED], [1])

    将把指定表的种子值强制重设为1。然而,你可能不想将种子重设为1,在这种情况下,你可以用你想用的种子值替代第三个参数。有时候你可能想知道当前的种子,而不是想重设种子,这时你就要用到NORESEED,而不用再去顾忌第三个参数。

    MS SQL中@@IDENTITY函数用法,@@IDENTITY是返回上次插入的标识值,标识值一般指的是自动增长值。

    语法
    @@IDENTITY

    返回值
    numeric

    示例如下:
    1、见下图是表ACTION_LOG里的现有数据
    示例图
    2、见对表ACTION_LOG插入一条数据

    INSERT INTO ACTION_LOG(UID,[ACTION],ACTION_DATE)
    VALUES('3','DELETE',GETDATE())

    因为表ACTION_LOG里的ID字段为自动标识,所以不能对其进行插入值的动作。如果此时执行上述代码则是单在表中插入一条数据,无法得到现表ID自动增长值的值。如果要在插入表记录的同时获得本次插入的标识值,则要运用到@@IDENTITY函数,其完整代码如下:

    INSERT INTO ACTION_LOG(UID,[ACTION],ACTION_DATE)
    VALUES('3','DELETE',GETDATE())
    SELECT @@IDENTITY

    其运行结果如下图:
    示例图
    以上的结果3便是最后一次插入表记录得到的自动增长值,将表ACTION_LOG的数据显示出来便于理解。
    示例图

  • 相关阅读:
    base64编码
    URL编码和解码
    Android MineType
    Gzip压缩
    关于文件与文件系统的压缩与打包命令-Linux(笔记)
    tesseract的编译安装
    HDOJ How many ways?? 2157【矩阵高速幂】
    [ACM] POJ 3253 Fence Repair (Huffman树思想,优先队列)
    6.非关系型数据库(Nosql)之mongodb:集群(主从复制)
    androidproject有红色叹号的解决方式
  • 原文地址:https://www.cnblogs.com/LifeKingcn/p/2767498.html
Copyright © 2011-2022 走看看