gpt4 book ai didi

sql-server - 有没有办法在不删除外键的情况下更新主键身份规范增量 1?

转载 作者:行者123 更新时间:2023-12-05 00:05:58 24 4
gpt4 key购买 nike

我正在尝试将主键 ID 更改为标识,以便在每个条目上递增 1。但是该列已被其他表引用。有什么方法可以将主键设置为自动递增而不删除其他表中的外键?

最佳答案

如果表不是那么大,则生成脚本来创建一个相同的表,但将其创建的模式更改为:

CREATE TABLE MYTABLE_NEW (
PK INT PRIMARY KEY IDENTITY(1,1),
COL1 TYPEx,
COL2 TYPEx,
COLn
...)
  1. 将您的数据库设置为单用户模式或确保没有人在您正在更改的数据库或表或更改您需要的表更改为只读。
  2. 使用 set IDENTITY_INSERT on 将数据从 MYTABLE 导入 MYTABLE_NEW
  3. 编写外键约束脚本并保存它们——以备不时之需稍后退出您的更改和/或重新实现它们。
  4. 从 MYTABLE 中删除所有约束
  5. 将 MYTABLE 重命名为 MYTABLE_SAV
  6. 将 MYTABLE_NEW 重命名为 MYTABLE
  7. 运行约束脚本以在 MYTABLE 上重新实现约束

附注您确实问过是否有办法不删除外键约束。下面是一些可以在您的测试系统上尝试的东西。在第 4 步运行ALTER TABLE MYTABLE NOCHECK 约束全部在第 7 步中,ALTER TABLE MYTABLE CHECK CONSTRAINT ALL。我自己还没有尝试过这个——看看这是否真的适用于重命名的表很有趣。

您可以提前在测试 SQL Server 上编写所有这些脚本,甚至可以在生产服务器上暂存数据库的副本——让实现日变得轻而易举,并为贵公司的任何变更控制程序衡量 SLA .

您可以通过删除主键并将其重新添加回来来执行类似的方法,但是在删除旧列之前,您需要在新列中插入相同的数据。因此,您将使用这种方法删除和插入模式并插入主键数据。如果可能的话,我喜欢避免接触生产表,并且在周围有 MYTABLE_SAV 以防“任何”意外发生对我个人来说是一种安慰——因为我可以告诉管理层“生产数据没有被接触过”。但是有些表实在是太大了,不值得采用这种方法,而且 DBA 之间的品味和方法也大不相同。

关于sql-server - 有没有办法在不删除外键的情况下更新主键身份规范增量 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com