zoukankan      html  css  js  c++  java
  • 自增长值

    1、自增长的插入数据

    对于自增长列有时候需要插入数据,如果是新手(我就是),然后没有接触过自增长的相关知识的话,可能就会出错。像我上次往一张空表插入数据的时候就出现如下的错误:

    消息 8101,级别 16,状态 1,第 1 行
    An explicit value for the identity column in table '.dbo.RMAMaster' can only be specified when a column list is used and IDENTITY_INSERT is ON.

    这个是有提示的,很明显,已经解释说明了需要把 IDENTITY_INSERT这个设置为ON才可以。

    如下所以未:

    set identity_insert t on  
    insert into t (id, name) values(1, 'sqlstudy')  
    set identity_insert t off  

    需要说明一下任何时候,一个会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,则对另一个表发出 SET IDENTITY_INSERT ON 语句时,SQL Server 将返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON,并报告已将其属性设置为 ON 的表。所以我们在写的时候也要注意这个成对的出现。

    2、设置种子值

         1)我们可以在自定义的时候直接对其进行设置 如 :

    CREATE TABLE T (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    NAME VARCHAR(20)
    )

    2)对数据之中已经存在的值进行指定值:

    假设T表中已经存在100条记录,也就是T表中的ID最多列是 100,由于某种需求,我们想要把初始值改掉,空余出一部分,现在开始之后的数据都由1000开始进行增长。

    DBCC CHECKIDENT ('t', RESEED,1000)
    注: tb: 是你要设置初始值的表名 , RESEED: 固定参数无需更改, 10000: 是你要设置的初始值
    会出现下面的提示:
    检查标识信息: 当前标识值 '100',当前列值 '1000'DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

    执行完上述语句,可以通过一下的语句查询一下:

    INSERT INTO T
    SELECT '测试初始值'
    
    SELECT MAX(ID) FROM T

    从查询结果可以看到我们的最大值为1001,也就是说101 -- 1000为预留值。

    注意: 对于自增的表进行 truncate 的时候初始值会被重置为 0TRUNCATE TABLE T 
    INSERT INTO T
    SELECT '测试'
    GO 100 
    SELECT * FROM T
    
    我们能看到这个结果的ID还是从 1 到100 而对于 DELETE FROM 的结果则会 从最大的ID开始递加。
    
    DELETE FROM T 
    INSERT INTO T
    SELECT '测试初始值1'
    SELECT * FROM T 
    
    这个结果则会是101

     也可以参考:http://www.cnblogs.com/zerocc/archive/2012/12/06/2805337.html 一起学习

  • 相关阅读:
    【好书摘要】性能优化中CPU、内存、磁盘IO、网络性能的依赖
    【转】性能调优从哪里入手
    【转】从来没有冲突的团队是最糟糕的团队
    【转】华为Java编程军规,每季度代码验收标准
    【转】性能测试随笔,看看罢了,只做笑谈尔。
    MVC的JsonResult用法
    artDialog
    js apply/call/caller/callee/bind使用方法与区别分析
    jquery的each()详细介绍
    ASP.NET 4.5.256 has not been registered on the Web server
  • 原文地址:https://www.cnblogs.com/zerocc/p/2293507.html
Copyright © 2011-2022 走看看