【问题标题】:Primary Key Resetting Issue with foreign keys and delete外键和删除的主键重置问题
【发布时间】:2015-05-01 20:28:07
【问题描述】:

我有一组表,我要清除它们并将新数据上传到其中。其中之一,Person 有指向它的外键,即使其他表为空,我也无法使用 TRUNCATE Table。

我在关闭外键检查后使用了 DELETE FROM 来解决这个问题。这有效,除非当我插入新值时,它们从旧值开始上升,我需要将它们重置为再次从 1 开始(或至少一些一致的可预测值)

DBCC CHECKIDENT ([Person], RESEED, -1);或 DBCC CHECKIDENT ([Person], RESEED, 0);我在其他地方看到了重置身份的建议,但没有给我任何有用的结果,而是产生了:

Checking identity information: current identity value 'NULL'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

如何截断以使用指向我的表的外键或使用 delete 清除表以重置主键的自动增量并从 1 开始?

【问题讨论】:

  • 您是否在运行DBCC 命令后尝试插入记录? NULL 的标识值表明种子已正确重置。
  • 你的意思是在同一个连接中?因为我在此之后通过运行我正在测试的代码插入了记录,并从 PersonId 最初的位置开始得到结果。如果它只在相同的连接中起作用,就可以解释我遇到的麻烦。
  • 我尝试在同一个连接上执行删除和插入操作,它成功了,然后我回到重新播种并在单独的连接上插入,这也有效,但我无法将其恢复到损坏的状态状态以验证实际修复它的原因。我想服务器进入了一些奇怪的内部状态,因为我之前尝试的完全没有工作现在工作正常。

标签: sql-server foreign-key-relationship identity truncate


【解决方案1】:

如果有指向它的外键,则不能截断表。 一种方法是暂时删除外键并在截断后重新创建它们。

Disabling foreign key constraint, still can't truncate table? (SQL Server 2005)

【讨论】:

    【解决方案2】:

    DBCC 命令应该可以工作。我删除了方括号并添加了单引号:

    DBCC CHECKIDENT ('dbo.Person', RESEED, 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 2012-06-05
      相关资源
      最近更新 更多