SQL Server SCOPE_IDENTITY() - 线程安全

2024-01-17

我们必须修改数据库并自己管理 IDENTITY 列(而不是依赖于 auto-inc 字段)。

我们的解决方案是有一个“生成器”表,其中有一个 auto-inc 字段。我们插入到该表中,然后读取 SCOPE_IDENTITY 值以获取新的 ID,例如

insert into NewIDEntity
        (CreationDate)
        select
        GetDate()

select @EntityID = SCOPE_IDENTITY()

我们主要关心以下场景:

• 事务1 INSERTS 到NewID 中并接收101 作为要插入到实体表中的新ID。
• 在提交之前,事务 2 插入 NEWID 并接收 101 作为新 ID(这是因为 SCOPE_IDENTITY() 将返回当前作用域上下文中的 ID。原始行尚未提交,因此我们期望值为 101)

• 事务1 提交并且该行被写入。
• 事务2 尝试提交,但101 已被写入,导致主键冲突并中止事务。

然而,在运行此命令时,SCOPE_IDENTITY() 似乎是由 SQL Server 处理的,即使在 READ UNCOMMITTED 隔离级别下运行,我们也不会遇到冲突。

这可以吗?还是有我们无法找到的问题?

谢谢 邓肯


身份生成本质上不属于任何事务的范围 - ID 计数器总是在 ID 生成后立即增加,而不仅仅是在提交事务时。这会导致身份序列在事务回滚时出现间隙,但这是因为它在您描述的那种情况下保证了安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server SCOPE_IDENTITY() - 线程安全 的相关文章

  • BULK INSERT 返回错误“访问被拒绝”

    运行批量插入时 BULK INSERT MyDatabase dbo MyTable FROM Mylaptop UniversalShare SQLRuleOutput csv WITH FIRSTROW 2 FIELDTERMINATO
  • 如何在 SQL Server 中不循环更新列?

    出于性能角度的考虑 我只需要删除循环并使用一些联接或其他解决方案来更新 Result 表中的数据并获得循环返回的相同结果 标量函数 CREATE FUNCTION MultiplyerScl a INT b INT RETURNS INT
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 根据数据框中的内容从SQL Server删除行

    我在 SQL Server 中有一个名为的库存表dbo inventory其中包含Year Month Material and Stock quantity 我每天都会收到 csv 文件形式的新库存计数 需要将其加载到dbo invent
  • 插入多行而不重复语句的“INSERT INTO ...”部分?

    我知道我几年前就已经这样做过 但我不记得语法了 而且由于提取了大量有关 批量导入 的帮助文档和文章 我在任何地方都找不到它 这就是我想做的 但语法不完全正确 请以前做过此操作的人帮助我 INSERT INTO dbo MyTable ID
  • 无法批量加载。操作系统错误代码 5(访问被拒绝。)

    由于某些奇怪的原因 我在执行批量插入时遇到问题 BULK INSERT customer stg FROM C Users Michael workspace pydb data andrew out txt WITH FIRSTROW 0
  • SQL Server:当列为 NTEXT 时 IN('asd') 不起作用

    我该如何解决这个问题 where someNtext IN asd asd1 给出错误 消息 402 第 16 层 状态 1 第 XXXXX 行数据类型 ntext 和 varchar 在等于运算符中不兼容 An INlist 只是 OR
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • 作为 UDF 结果的列上的 Where 子句

    我有一个用户定义的函数 例如myUDF a b 返回一个整数 我试图确保该函数仅被调用一次 并且其结果可以用作WHERE clause SELECT col1 col2 col3 myUDF col1 col2 AS X From myTa
  • 如果存在多个相同的 ID,则使用 where 子句

    我有下表 ID source Name Age 1 SQL John 18 2 SAP Mike 21 2 SQL Mike 20 3 SAP Jill 25 我希望每个ID都有一条记录 这背后的想法是 如果 ID 仅出现一次 无论来源如何
  • SQL Server 每年的第一个星期一

    如何使用 T SQL 查找 一年中的第一个星期一 这是 ngruson 发布的链接中的示例 http sqlbump blogspot nl 2010 01 first monday of year html http sqlbump bl
  • 如何使用 ssis 2008 循环遍历 Excel 文件并获取工作表名称

    我正在尝试将 Excel 文件中的数据加载到 SQL 数据库表中 该文件的工作表名称不是静态的 工作表名称包含 yyyymmdd 它会随每个文件而变化 我按照提供的解决方案进行操作如何使用 SSIS 包循环遍历 Excel 文件并将其加载到
  • 查询获取每条记录的最小日期[重复]

    这个问题在这里已经有答案了 我想获取表中每条记录的最小日期 该表具有多个带有一个主键的日期条目 看看我的桌子 CaseNo Entry date ABC 001 2 12 13 ABC 002 2 09 13 ABC 001 1 01 13
  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • SQL Server 2008 中的全文搜索一步一步

    如何开始使用SQL Server 2008 中的全文搜索 阅读这些链接 SQL SERVER 2008 创建全文目录和全文搜索 http blog sqlauthority com 2008 09 05 sql server creatin
  • 使用显式创建表语句与 select into 创建表

    使用显式创建表语句和加载数据与选择数据之间是否存在性能差异 此示例仅显示 2 列 但问题是针对使用非常大的表 下面的示例也使用临时表 尽管我也想知道使用常规表的效果 我认为无论表格类型如何 它们都是相同的 临时表场景 Explicitly
  • 在 SQL Management Studio 2012 中调试

    我正在使用 Management Studio 2012 但无法调试任何 SQL 代码 在我点击 调试 按钮后 左侧没有看到任何绿色箭头 并且我的 SQL 对象都没有加载到内存中 当我将光标移到我设置的断点上时 我收到此消息 The bre
  • 如何安全地使用保留的 SQL 名称?

    我正在使用 Cakephp 3 使用 sqlserver 作为数据源服务器 我确信我的数据库连接没有问题 因为 home ctp 提示我已连接到我的数据库 并且我还使用迁移插件来创建我的表 似乎使用它没有问题这些工具 但是在我烘焙 MVC

随机推荐

  • @ActiveProfiles 值未分配给配置

    如果我将它们设置为虚拟机参数 我的活动配置文件将正常工作 我有一个想要使用的测试 ActiveProfiles local 这是我正在使用的类注释 RunWith SpringJUnit4ClassRunner class ContextC
  • 使用 Twitter Bootstrap,如何自定义一页的 h1 文本颜色,而将其他页面保留为默认颜色?

    在我的索引页面上 我希望 h1 文本颜色为白色并带有阴影 但我不想更改其他页面上 h1 的默认行为 我怎样才能实现这个目标 在 Bootstrap 3 中 以下是更改文本颜色的类 p class text muted p grey p cl
  • Python 中更快的套接字

    我有一个用 Python 编写的服务器客户端 它通过 LAN 运行 该算法的某些部分使用套接字密集读取 其执行速度比几乎一样的 http pastie org 3962231用 C 编写 有哪些解决方案可以使 Python 套接字读取速度更
  • 从视图创建位图使视图消失,如何获取视图画布?

    我发现了两种从视图创建位图的方法 但一旦我这样做了 视图就会消失 我就不能再使用它了 生成位图后如何重绘视图 1st public static Bitmap getBitmapFromView View view Bitmap retur
  • 如何从java中的另一个类更新jLabel或setText?

    我正在尝试创建一个JFrame哪里的jLabel和按钮位于另一个类中 我在其中创建了一个方法putTextNow这会将文本设置为jLabel 我读到应该使用多线程来完成 这对我来说更复杂 这是我的代码 NewJFrame java priv
  • 在 JBoss 上安装 SSL 证书

    我有一台运行 JBoss 的服务器 当我在该服务器上输入错误的 URL 时 它会给出如下版本 JBossWeb 2 0 1 GA JBoss 的版本是什么 我们将为我购买并提供 SSL 证书 以便我可以将其安装在 JBoss 中 我真的很感
  • 如何为 Mac OSX 编写虚拟打印机驱动程序 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要为 OSX 编写一个 虚拟打印机驱动程序 以便当用户按 Command P 打开 打印 对话框时
  • SQL模糊匹配

    希望我没有重复这个问题 在在这里发帖之前 我在这里做了一些搜索和谷歌 我正在使用启用全文的 SQL Server 2008R2 运行 eStore 我的要求 有一个产品表 其中包含产品名称 OEM 代码 该产品适合的型号 一切都在文字中 我
  • 我如何使用 zip(), python

    例如 我有这些变量 a 1 2 b 3 4 如果我使用函数zip 对于它 结果将是 1 3 2 4 但我有这个清单 a 1 2 3 4 而且 我需要得到与第一个结果相同的结果 1 3 2 4 但是 当我这样做时 zip a I get 1
  • 在 C 中写入多个文件并迭代其名称

    我试图通过迭代 进行一些计算并将索引添加到文件名来编写一堆文件 这是我的代码的一部分 我强调了代码停止编译的位置 float AltAzCalc int d float t float Lon float RA float Dec floa
  • 计算所有 k 乘积之和的高效算法

    假设给你一个列表L of n数字和整数k
  • Jenkins 以非常高的 CPU 使用率运行

    我最近从 Jenkins 1 6 升级到 2 5 这样做之后 我注意到 CPU 使用率非常高 有时超过 300 只有 4 个核心 所以我认为它不会超过 400 我不知道从哪里开始调试这个 但这是一个线程转储 https gist githu
  • 在哪里可以找到 dojo 工具包 dijit 小部件的图标图像列表?

    我想这是一个简单的问题 但尽管进行了一些谷歌搜索 我仍然没有找到答案 有谁知道在哪里可以找到 Dojo 工具包中可用图标的列表 最好看的地方是Dojo Toolkit nightly 图标目录 http archive dojotoolki
  • 在子文件夹中搜索 VSCode,而不是整个工作区

    如何仅在工作区的一个子文件夹中进行搜索 CTRL SHIFT F searches in the whole workspace and since this is large I get way too many hits in unre
  • Objective-C - 将 CSV 解析为数组

    我如何将 CSV 解析为数组 它只是我转换为 CSV 的一列电子表格 所以应该不会太难吧 我该怎么做 使用适当的 CSV 解析器 例如https github com davedelong CHCSVParser https github
  • 如何在整数列上指定“喜欢”?

    这让我很困惑 我想我会将其提交给 SO 社区寻求帮助 用户想要选择以某个 ID 开头的所有订单 例如 123会回来123 12345 1238790等等 但是 ID 是一个 int 列 我正在使用 nHibernate 目前我的线路是 cr
  • C++ 异常会通过 C 代码安全传播吗?

    我有一个 C 应用程序调用SQLite http www sqlite org 的 SQLite 使用 C 语言 sqlite3 exec http www sqlite org c3ref exec html它又可以调用我用 C 实现的回
  • 无法在本地以及 docker 中启动“django”项目

    我在用Docker部署Python2 7申请与Django1 8 过去两天我遇到了一些问题 我发现错误如下 Docker 镜像 python 2 7 slim buster Error root 64f8c580dd0a code pyth
  • 如何使 scrapy 中的 start_url 从消息队列中使用?

    我正在构建一个 scrapy 项目 其中有多个蜘蛛 每个域一个蜘蛛 现在 要抓取的 URL 是动态地来自用户给定的查询 所以基本上我不需要进行广泛的爬行 甚至不需要跟踪链接 将会有一个接一个的网址 我只需要使用选择器进行提取 所以我在想 如
  • SQL Server SCOPE_IDENTITY() - 线程安全

    我们必须修改数据库并自己管理 IDENTITY 列 而不是依赖于 auto inc 字段 我们的解决方案是有一个 生成器 表 其中有一个 auto inc 字段 我们插入到该表中 然后读取 SCOPE IDENTITY 值以获取新的 ID