zoukankan      html  css  js  c++  java
  • 关于truncate与checkident

    今天一个同学在弄一个程序的时候想要初始化所有新建的表,决定使用truncate table xx来进行初始化,但始终报外间约束,初始化失败,奇怪,难道没有将主表关联的

    其他表的记录删除吗,查看后将所有关联的表删除后,重新初始化该表,发现还是报同样了错,这是有点纳闷了,试了下delete xx是可以删除的

    带着疑问网上搜了下,原来有外键关联的表确实不能进行初始化:

    1.由 FOREIGN KEY 约束引用的表。
    2.参与索引视图的表。
    3.通过使用事务复制或合并复制发布的表。

    对于具有以上一个或多个特征的表,使用 DELETE 语句,不能使用truncate,除非先将外键约束暂时去掉。但delete的话,不能将自增的id进行初始化。

    但有时候对自增的id值进行初始化还是有必要的,这是我们就必须使用DBCC CHECKIDENT

    检查指定表的当前标识值,如有必要,还对标识值进行更正。

    语法
    DBCC CHECKIDENT
        ( 'table_name'
            [ , { NORESEED
                    | { RESEED [ , new_reseed_value ] }
                }
            ]
        )


    如果标识列上有主键或唯一键约束,
    使用DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) 当前值设置为new_reseed_value,这个时候需要注意:new_reseed_value 的值应该取当前标识列中的最大值,避免插入错误。

    示例:

    表:

    其中ID是递增的列,现在在查询分析器中运行以下语句将当前标识值改为10,

    USE 数据库名
    GO
    DBCC CHECKIDENT (表名, RESEED, 10)
    GO

    可以发现自增的ID从11开始了,因此我们可以使用这种方式将自增ID进行初始化:

    1.先将该表中的所有记录进行删除

    2.执行

    USE 数据库名
    GO
    DBCC CHECKIDENT (表名, RESEED, 0)
    GO

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/shenliang123/p/2571333.html
Copyright © 2011-2022 走看看