将主键重置为1

17 浏览
0 Comments

将主键重置为1

我有一个用于微软SQL Server数据库的脚本,其中包含数百个表格,这些表格也包含数据。这是一个网络应用程序的数据库。我想要做的是删除之前的记录并将主键重置为1或0。

我尝试过以下代码`DBCC CHECKIDENT ('dbo.tbl', RESEED, 0);`,但是对于大多数表格,主键并不是自增的,所以这个方法对我不起作用。

由于该表的主键在许多其他表格中被用作外键,所以我不能截断表格。

我还尝试了在表格的主键中添加标识规范,并运行checkident查询,然后再将其改回非标识规范,但是在再次添加记录后,它会从上次停止的地方开始。

对我来说,改变代码不是一个选项。

请帮忙解决。

0
0 Comments

原因:无法重置主键为1的问题是由于重新创建数据库后,主键自动从上次停止的位置开始递增导致的。

解决方法:可以使用以下方法解决重置主键为1的问题:

1. 在重新创建数据库之前,先备份数据库,以防止数据丢失。

2. 在重新创建数据库之后,找到需要重置主键的表格。

3. 执行以下SQL语句,将表格的主键自增值重置为1:

DBCC CHECKIDENT ('表格名称', RESEED, 0);

4. 重新插入数据时,主键将从1开始递增。

请注意,重置主键可能会导致数据关联性的问题,因此在执行此操作之前,请确保所有相关的表格和关系已经处理完毕。

0
0 Comments

根据您的问题,我不确定主要目标是什么,为什么呢?如果您需要截断许多表并更改它们的结构以具有Identity属性,为什么不能禁用FK?过去,我使用了一个标准流程来重建表格并迁移所有信息,这代表了一组步骤,我会尝试帮助您,但您应该按照以下步骤进行操作。

步骤:

1)禁用FK以更改表格的结构。您可以在下面的链接中找到此任务的解决方案:Temporarily disable all foreign key constraints

2)使用新的Identity属性修改表格,这是一个典型的ALTER TABLE xxxxxx过程。

3)执行之前发布的语法:

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

尝试按照这个路径进行操作,如果遇到任何问题,请随时向我们提问。

0
0 Comments

重置主键为1的问题出现的原因是,有些表使用了从未知来源获取的主键值,无法直接修改。解决方法是在这些表上创建一个after insert触发器,通过减去一个常数来修改新插入记录的主键值。

触发器的代码如下:

CREATE TRIGGER trg_sometable_ai
ON sometable
AFTER INSERT
AS
BEGIN
    UPDATE st
    SET st.pk_col = st.pk_col - 5253
    FROM sometable AS st
    INNER JOIN INSERTED AS i
    ON i.pk_col = th.pk_col
END

需要根据每个表确定下一个主键值和对应的“减数”。如果代码还向具有外键引用的表插入子记录,并使用先前生成的值作为外键值,还需要修改这些触发器。

总之,这是一种“最后的手段”,不建议在其他有其他选项的情况下使用。修改主键值通常不是一个好主意。

0