Sql server 有没有一种方法可以在不删除外键的情况下更新主键标识规范增量1?
我正在尝试将主键Id更改为identity,并在每个条目上递增1。但该列已被其他表引用。有没有办法将主键设置为自动递增,而不从其他表中删除外键 如果表不是那么大,则生成脚本以创建相同的表,但将其创建的架构更改为:Sql server 有没有一种方法可以在不删除外键的情况下更新主键标识规范增量1?,sql-server,Sql Server,我正在尝试将主键Id更改为identity,并在每个条目上递增1。但该列已被其他表引用。有没有办法将主键设置为自动递增,而不从其他表中删除外键 如果表不是那么大,则生成脚本以创建相同的表,但将其创建的架构更改为: CREATE TABLE MYTABLE_NEW ( PK INT PRIMARY KEY IDENTITY(1,1), COL1 TYPEx, COL2 TYPEx, COLn ...) 将数据库设置为单用户模式,或确保没有人在数据库中 正在更改的数据库或表或需要更改的表 更改为只
CREATE TABLE MYTABLE_NEW (
PK INT PRIMARY KEY IDENTITY(1,1),
COL1 TYPEx,
COL2 TYPEx,
COLn
...)
您可以通过删除主键并重新添加它来执行类似的方法,但在删除旧列之前,需要在新列中插入相同的数据。因此,您将使用这种方法删除和插入模式并插入主键数据。如果可能的话,我喜欢避免触摸生产表,让MYTABLE_SAV在身边以防“任何”意外发生对我个人来说是一种安慰——我可以告诉管理层“生产数据没有被触摸”。但是有些表太大,这种方法不值得,而且不同的DBA的品味和方法也有很大差异。您不能更改identity属性,只能为新列设置它。创建一个新的标识列,使用上的
set identity\u insert[table]复制值,删除并重新创建外键约束。或者,从SQL Server 2012开始,您可以使用序列提供默认值,而无需删除该列。看见请注意,在该解决方案中,可以修改该值,这取决于您的场景。如果您使用的是sql server 2012或更高版本,我建议您创建一个序列,并为引用该序列的id列添加一个默认值。它的行为类似于identity,但不需要重新创建列。