我最近从PostgreSQL数据库迁移到SQL Server数据库。要切换数据,我必须启用IDENTITY_INSERT。好吧,我发现在任何一个表中进行插入时,由于重复的标识值(被设置为主键),我都会遇到各种各样的奇怪错误。
我有很多桌子。自动重新播种每个表的身份以使其在max(RID)
之后的最简单方法是什么?
最佳答案
将this link中的信息与SQL函数结合使用,该SQL函数将从需要重置的每个表中获取max(RID)。例如,如果要在25000处启动主键种子,请使用下面的代码(StartSeedValue-1)
DBCC CHECKIDENT('myTable', RESEED, 24999)
因此,结合起来,您应该得出这样的结论
DECLARE @maxVal INT
SELECT @maxVal = ISNULL(max(ID),0)+1 from mytable
DBCC CHECKIDENT('mytable', RESEED, @maxVal)
对不起,伪代码,已经有一段时间了,因为我已经编写了一个SQL函数:)
编辑:
感谢您的帮助,将INTEGER更改为INT
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
这将为您提供数据库中所有用户表的列表。使用此查询作为您的“循环”,这应该允许重置所有表上的种子。
关于sql-server - 使用identity_insert后如何自动重新设置种子?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2923855/