sql - 在 SQL Server 2017 中使用标识列间隙
问题描述
我的桌子上有几 1000 次跳跃。我已经找到了原因,我想说的很晚,这是频繁的服务器故障并重新启动并执行
set identity cache=off
。
希望这些大的跳跃不会发生。现在我想在新条目的间隙中重用这些数字,最好的方法是什么?改变种子值是可能的吗?请注意,我无法更改任何现有数据。另外,请注意添加新条目的速度很慢(每天少于 10 个条目),我可以密切关注这个数据库,并在必要时再次手动更改种子值。
非常感谢。
解决方案
您可以在脚本的开头和结尾使用SET IDENTITY INSERT table_name ON
和为每个实例编写脚本。SET IDENTITY INSERT table_name OFF
完整的文档在这里。您一次只能在一张桌子上使用它。
更改种子将无效,因为将始终使用下一个最高值。
以下脚本将有助于识别差距。
SELECT TOP 1
id + 1
FROM mytable mo
WHERE NOT EXISTS
(
SELECT NULL
FROM mytable mi
WHERE mi.id = mo.id + 1
)
ORDER BY
id
这是来自这个问题/答案
更新
一种可能的策略是使数据库脱机,使用SET IDENTITY INSERT
所需的 ID 填充间隙/跳跃,但否则为最小/空数据,然后再次启用。然后使用空记录,直到全部使用,然后恢复到以前的方法。
推荐阅读
- java - 如何模拟所需的相关实体?
- python - 在 MacOS 上使用 Spotlight 从 .command 文件运行 Python 脚本
- scala.js - org_scalajs_dom_raw_HTMLDocument(...).createRange 不是函数
- macos - 将带有符号链接的 tar.gz 文件解压缩到另一个目录中
- c - 如何从 C 程序函数调用包含简单函数的程序集文件?
- javascript - 在javascript中以编程方式转义/脚本结束标记
- kubernetes - gRPC 节点微服务与 istio 网格中的另一个微服务通信
- python - 我怎么知道它是否是 for 循环的最后一次迭代?
- java - 颤振:我无法构建 android apk
- php - 调用 Prestashop postProcess 方法