首页 > 数据库 > mysql教程 > 如何在 SQL Server 2005 中使用 ROW_NUMBER() 自动递增非标识列?

如何在 SQL Server 2005 中使用 ROW_NUMBER() 自动递增非标识列?

Patricia Arquette
发布: 2024-12-27 01:10:10
原创
871 人浏览过

How Can I Auto-Increment a Non-Identity Column in SQL Server 2005 Using ROW_NUMBER()?

在 SQL Server 2005 中使用 ROW_NUMBER() 而不使用 ORDER BY 进行自动递增

在 SQL Server 2005 中,自动递增非当使用 ROW_NUMBER() 且缺少标识列时,标识列可能会具有挑战性合适的 ORDER BY 标准。但是,还有其他选择:

将 ROW_NUMBER() 与常量 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};
登录后复制

This方法避免显式排序,同时确保 ID 列中的唯一性。

警告:不保证原始排序:

需要注意的是,这种方法不能保证保存原始的SourceTable顺序。其他因素,例如外部查询的 ORDER BY,可能会影响结果排序。

并发注意事项:

锁定提示(TABLOCKX 和 HOLDLOCK)包含在查询以防止并发进程在查询执行步骤之间插入相同的 ID。但是,这种方法不如使用标识列有效,只能被视为一种解决方法。

推荐解决方案:使用标识列:

为了获得最佳性能和并发性方面,强烈建议使用identity列进行自增。

以上是如何在 SQL Server 2005 中使用 ROW_NUMBER() 自动递增非标识列?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板