在 SQL Server 2005 中生成自动增量 ID,无需 ORDER BY
自动增量时需要将数据从一个表插入到另一个表中非身份列可能是一个挑战。标准方法涉及使用游标或创建表变量,但这些可能效率低下。
如果没有合法的 ORDER BY 字段,可以使用 ROW_NUMBER 函数。但是,缺乏显式排序并不能保证原始数据顺序的保留。这是因为“未排序”与“保留原始顺序”不同。
要解决此问题,解决方案包括避免显式排序,如下所示:
INSERT dbo.TargetTable (ID, FIELD) SELECT Row_Number() OVER (ORDER BY (SELECT 1)) + Coalesce( (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)), 0 ), FieldValue FROM dbo.SourceTable WHERE {somecondition};
此方法计算 Max ID 并在获取锁时插入数据以避免并发错误。
但是,请注意,强烈建议使用标识列,因为它消除了锁定和插入的需要确保最佳并发性。标识列为 SQL Server 中的自动递增 ID 提供了更高效、更强大的解决方案。
以上是如何在 SQL Server 2005 中自动递增非标识列而不使用 ORDER BY?的详细内容。更多信息请关注PHP中文网其他相关文章!