sql - SQL Column ID值跳跃10000次
问题描述
ID列索引跳转10000次。
例如:
从 索引:
5
去10006
和继续
10007
,10008
,10009
然后去
20003
,20004
....
我怎样才能修复 ID 值并像以前一样重新排列它们?
我也找到了一些关于 Reseed 功能的东西,但我不知道它是什么以及如何使用它?
解决方案
我假设您正在使用身份列:
ID INT NOT NULL IDENTITY(1,1)
不能保证这将保持顺序。当它第一次变得更加明显时很烦人(在旧版本的 SQL Server 中似乎没有发生,但显然可能发生),但也总是设计使然。当 2012 (?) 发布时,跳过变得非常明显。你现在应该使用 SEQUENCE 我相信如果需要保持稳定的序列 - 例如发票号码:
如果您执行 INSERT 并且它失败,它也可能会出现跳过,但这通常只会跳过 1。这总是发生并且是设计使然——你需要重新植入你的身份来克服这个问题。就像是:
DBCC CHECKIDENT ("dbo.MyTable", RESEED, 10)
如果其他跳过也不会发生,则将使下一个标识号为 11。
编辑:关于重新对齐现有条目,我不是数据库专家,但前几天我确实在一张桌子上使用了一种相当基本的方法 - 但它只是一张小桌子 - 可能有更好的方法来做到这一点:
BEGIN TRAN
--CREATE TEMP TABLE
DECLARE @Tooltip TABLE
(
[TooltipId] INT NOT NULL,
[TooltipKey] NVARCHAR(100) NOT NULL,
[Name] NVARCHAR(255) NOT NULL
)
--INSERT EXISTING INTO TEMP TABLE
INSERT INTO @Tooltip (TooltipKey, Name )
SELECT TooltipKey, Name
FROM dbo.Tooltip
ORDER BY TooltipId
--CLEAR ACTUAL TABLE
TRUNCATE TABLE dbo.Tooltip
--RESET IDENTITY TO 1
DBCC CHECKIDENT ("dbo.Tooltip", RESEED, 1)
--REINSERT FROM TEMP TABLE INTO ACTUAL TABLE
INSERT INTO dbo.Tooltip (TooltipKey, Name )
SELECT TooltipKey, Name
FROM @Tooltip
ORDER BY TooltipId
--TEST OUTPUT
SELECT * FROM dbo.Tooltip
--DO THIS FOR TESTING
ROLLBACK TRAN
--DO THIS WHEN YOU'RE CERTAIN YOU WANT TO PERFORM THE ACTION
--COMMIT TRAN
请记住,如果您有外键或其他引用,则截断将不起作用,您将不得不做一些更复杂的事情。特别是如果您有外键引用您现有的不正确 ID
推荐阅读
- reactjs - 如何从钩子中使用 .then 模拟函数
- python - Python:numpy行的一般总和
- json - 解析 JSON 时出错:输入中有多个文档(Redshift 到 Snowflake SQL)
- azure-data-factory - 如何创建 Azure 数据工厂直到检查 API 是否返回状态值的活动?
- ios - SwiftUI 视图混合了 UIViewController 的视图
- python - 将 Pandas 系列分成几个字符系列
- python - 删除数据框中的空标记
- docker - 为什么 GitHub 操作无法推送 docker 镜像?
- bash - 用于运行程序 100 次并获取结果的脚本
- azure-machine-learning-studio - Azure AutoML 似乎添加了额外的输入?