【问题标题】:Delete and Recycle Auto incremented value in SQL在 SQL 中删除和回收自动增量值
【发布时间】:2018-03-17 22:01:35
【问题描述】:

在我的一个数据库中,

一个表可以说“Active Records”有一个具有自动递增值的列或说标识列。

现在该表中的记录已被删除,可以说是“已删除记录”表。

现在。我希望它回到原来的“Active Records”表中。

这是否可以移动到具有原始标识的已删除记录的原始表?

因为我想与已删除的记录保持其他关系(我尚未删除)。 (这是因为用户可能错误地删除了记录。所以我想允许他们回收记录)

这有可能吗?

示例。

我在“活动记录”中插入记录。所以自动增量值将是 1,2,3,4 等等。

现在我删除记录 2 并将该记录移动到“已删除记录”

现在用户想要它回来。但是,如果我将该记录插入“活动记录”,由于自动增量,它的值将是 5。但我的值应该保留为 2。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。此外,样本数据和期望的结果也会有所帮助。
  • 可以分享一下你的表结构吗?
  • 改用is_deleted 标志。并且不要“删除”任何内容。
  • 我不想使用标志。因为我想减少不必要的记录主表。

标签: sql sql-server


【解决方案1】:

您可以指定IDENTITY_INSERT...ON,以便使用提供的值而不是自动分配的值。必须指定显式列列表,其中包括 IDENTITY 列。例如:

SET IDENTITY_INSERT dbo.ActiveRecords ON;
INSERT INTO dbo.ActiveRecords(RecordID, OtherData)
SELECT RecordID, OtherData
FROM dbo.DeletedRecords
WHERE RecordID = 2;
SET IDENTITY_INSERT dbo.ActiveRecords OFF;

【讨论】:

  • 之后会从下一个号码继续吗?
  • 除非插入的值之一超过下一个标识值,否则下一个标识值将保持不变。在这个用例中不会发生这种情况。
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 2019-04-19
  • 2011-01-13
  • 2012-09-21
  • 1970-01-01
  • 2016-11-20
相关资源
最近更新 更多