服务器端只进游标破坏@@IDENTITY

2024-01-12

这是一个最小的重现示例。

数据库:

CREATE TABLE temp (x int IDENTITY(1, 1), y int);

代码(使用VBA和ADO):

Public Sub repro()
    Dim cn As New Connection
    Dim rs1 As New Recordset
    Dim cmd As New Command
    Dim rs2 As New Recordset

    cn.Open "Provider=SQLNCLI11;Server=myServer;Database=myDatabase;Trusted_Connection=Yes"

    rs1.Open "SELECT 1", cn, adOpenForwardOnly      ' [X] '

    cmd.ActiveConnection = cn
    cmd.CommandText = "INSERT INTO temp (y) VALUES (1) "
    cmd.Execute

    rs2.Open "SELECT @@IDENTITY", cn, adOpenStatic
    Debug.Print rs2(0).value

    rs2.Close
    rs1.Close                                       ' [X] '
    cn.Close
End Sub

预期结果: The Debug.Printline 向调试窗口输出一个整数。

实际结果: The Debug.Print线路输出Null到调试窗口。

Notes:

  • 一旦我删除标记为的行[X],代码按预期工作(最后插入的标识值被写入调试窗口)。
  • 这是一个最小的重现示例: I know服务器端游标是“邪恶的”。我know在这种特殊情况下添加SELECT SCOPE_IDENTITY()到 INSERT 批处理是获取新插入的 ID 的正确方法。这只是一个用尽可能少的代码重现问题的最小示例。我在修改遗留代码时偶然发现了这个问题。
  • 使用 SQL Server Native Client 11.0 和“经典”MDAC SQL Server ODBC 驱动程序进行了测试。使用 SQL Server 2005 和 2012 进行测试。没有什么区别。

我的问题:这是设计使然,还是我偶然发现了 SQL Server 错误?如果是前者,它记录在哪里?


编辑:将两个选项(带和不带 [X])与 SQL Server Profiler 跟踪进行比较,有一个显着差异:当包含 [X] 行时,连接显然被删除并重新打开(Audit Logout - Audit Login) 之间cmd.Execute and rs2.Open。我想这可以解释为什么@@IDENTITY不再有效。

这就留下了以下问题:为什么 ADO(或 SQLNCLI11 驱动程序?)在一种情况下关闭并重新打开连接,而在另一种情况下则不然?这在哪里记录?


MARS 是默认行为的更好替代方案,它实际上允许多个记录集。

发生的情况是:

  1. SELECT 1充当连接的活动记录集并保持打开状态
  2. 当你执行insert提供程序知道它有一个活动记录集,并尝试通过创建新连接来执行语句而不干扰任何内容来提供帮助
  3. 这个临时连接执行insert然后通过执行锁定来整理 - 销毁与其关联的状态
  4. select @@identity再次使用临时连接,其中@@identity因为前面的语句超出了范围,因此NULL.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器端只进游标破坏@@IDENTITY 的相关文章

  • VBA 激活 Internet Explorer 窗口

    我正在制作一个宏 用于打开 Internet Explorer 导航并登录网站 一切正常 但我需要将 IE 窗口放在前面并激活它 这样我就可以使用SendKeys在上面 我发现网站和视频在名为的命令上有不同的方法AppActivate我已经
  • 在 SQLCMD 模式下格式化输出?

    有没有办法可以指定输出文件格式SQLCMD模式这样我就可以使用它读回来BULK INSERT 我想做这样的事情 CONNECT SERVER1 OUT E test SELECT TOP 100 ID NAME FROM DB1 dbo T
  • 将按颜色过滤的行复制到新工作表

    我有一个 Excel 电子表格 如下所示 Job1 Job2 Job3 Job4 Job5 Job1 Job2 Job3 Job4 Job5 每行和列之间的单元格颜色不同 我需要按橙色对每列进行排序 然后将行名称复制到新工作表中 所以最后我
  • 一个存储过程创建的临时表可以在另一个存储过程中使用吗?

    我有一个存储过程 它使用找到的索引创建一个临时表CONTAINSTABLE就像 我放了一段存储过程代码 CREATE TABLE tmpTable ID INT RANK INT SELECT query SELECT DISTINCT I
  • 在 MS Outlook 中,报告所有未收到回复的已发送邮件

    我每天都会发送大量电子邮件 但常常无法跟踪哪些邮件得到了实际回复 有没有办法使用 VBA 脚本查看上周发送的所有消息 并检查他们是否收到回复 具体来说 是一份已发送电子邮件的报告 这些电子邮件尚未从至少一个发送到的地址收到回复 我了解一点
  • 运行代码(而不是查询)时如何在状态栏上显示进度

    我已经发布了有关在 MS Access 2010 中运行查询时更新状态栏的问题 请参阅在 MS Access 中运行一系列查询时如何在状态栏上显示进度 https stackoverflow com questions 27765376 h
  • 将范围内的每个值乘以常数,但跳过空白单元格

    我需要一个简单快速的解决方案 用于将范围内的所有值乘以 VBA 代码中的数值 我知道这个解决方案 将整个范围乘以值 https stackoverflow com questions 18990541 multiply entire ran
  • 使用 WHILE 创建虚拟数据

    我尝试使用 a 在表中插入一些虚拟数据WHILE 但它运行得非常非常慢 我在想也许我写的代码不正确 你能看一下并确认一下吗 Insert dummy data DECLARE i int Content int SET i 5001 WHI
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • 如何在 SQL Server 中的特定字符后分割字符串并将该值更新到特定列

    我有包含数据的表格1 1 to 1 20在一列中 我想要值 1 到 20 即 前斜杠 之后的值更新到 SQL Server 中同一表中的其他列 Example 专栏有价值1 1 1 2 1 3 1 20新列值1 2 3 20 也就是说 我要
  • VBA 有没有办法了解未使用的变量?

    标准 VBA 编辑器中是否有工具 方法或设置来警告已被修改的变量Dim med 但没有被使用 MZ Tools http www mztools com index aspx将搜索您的代码并告诉您哪些内容未被使用 VBA的版本可以找到her
  • Scrapy - 如何抓取网站并将数据存储在 Microsoft SQL Server 数据库中?

    我正在尝试从我们公司创建的网站中提取内容 我在 MSSQL Server 中为 Scrapy 数据创建了一个表 我还设置了 Scrapy 并配置了 Python 来抓取和提取网页数据 我的问题是 如何将Scrapy爬取的数据导出到我本地的M
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 避免连接失败时出现空指针

    我有我的域类 带有命名查询 class Atendimento implements Serializable Funcionario funcionario static mapping funcionario column FUNCOD
  • 存储过程和权限 - EXECUTE 就足够了吗?

    我有一个 SQL Server 2008 数据库 其中对基础表的所有访问都是通过存储过程完成的 一些存储过程只是从表中选择记录 而其他存储过程则进行 UPDATE INSERT 和 DELETE 如果存储过程更新表 执行存储过程的用户是否也
  • VBA ByRef 参数类型不匹配

    最初在我的主代码部分中 我有一个丑陋的 if 语句 尽管它会运行丑陋 我决定将其设为我要调用的函数 这导致我收到错误 编译错误 ByRef 参数类型不匹配 我的假设是该函数需要正确引用 尽管我一直在阅读文档并且不明白为什么 gt 声明 Sh
  • 我如何以更好的方式编码而不是像这样的VBA编码

    我正在 Excel 中创建一个仪表板 但是我想知道是否有比这更好的编码方式 我想对其进行模块化 而不是这样做以使其更加整洁 Private Sub Afford If af Value True Then af afr Value Shee
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm

随机推荐

  • 这个shell测试达到什么目的

    我有一个非常简单的问题 我无法回答 在 shell 中 这个命令会做什么 test d VIRTUAL ENV virtualenv VIRTUAL ENV 它似乎测试 virtualenv 目录是否存在 但我不明白 if 会如何处理该信息
  • 快速或简洁地确定基于行的数据集合中每列的最长字符串

    从我上次查询的结果 https stackoverflow com questions 2760168 can i set auto width on an open xml sdk generated spreadsheet withou
  • 为什么实现 IObjectSafety 没有带来什么改变?

    我们有一个 activex 对象 它实现了 IObjectSafety 以表明它对于脚本编写是安全的 它从受信任的站点安装 但我们仍然收到 IE 投诉 称该页面上的控件对于脚本编写不安全 运行我们的 activex 的站点管理员不愿意启用未
  • HQL 查询 id 对/元组

    我正在尝试使用 HQL 查询两个域之间新创建的关系 所以我想做类似的事情 select x id y id from Author as x join x books as y where x id y id not in 1 2 3 4
  • 通过连接查询大型数据集(15+ 百万行)

    我正在尝试连接两个表 products and products markets While products记录不足一百万条 product markets接近2000万条记录 数据已更改 因此架构创建表中可能存在一两个拼写错误 CREA
  • Javascript 日期时间字符串到 Date 对象

    我正在调试一个小型应用程序 其某些功能只能在 Chrome 中运行 问题在于日期选择器 您在其中选择日期和时间 然后日期选择器将其连接到日期时间字符串中 无论如何 字符串看起来像这样 2012 10 20 00 00 然而 现在使用它的 j
  • 为 property = "type.id" 选择什么 @JsonTypeInfo.ID 进行反序列化,JsonTypeInfo.Id.CUSTOM?

    所以我的 JSON 看起来像这样 ActivityDisplayModel name lunch with friends startTime 12 00 00 type id MEAL description Meal complete
  • 将标志传递给 Matlab 函数的最简洁方法是什么?

    我正在设计一个函数 它以一个结构和任意数量的标志作为参数 该函数将包含几个if检查是否设置了特定标志 实现这一目标的最巧妙方法是什么 我正在考虑将标志作为单独的字符串参数传递 有更简洁的解决方案吗 我会像使用那样做varargin and
  • Spring Batch ChunkRequest 抛出 stackOverflow

    我正在挣扎Spring Batch 远程分块使用较新版本的 Spring boot 首先 我尝试将 ChunkRequest 作为事件发送 这是不可能的 因为它没有公共默认构造函数 作为解决方案 我必须创建自定义序列化器和反序列化器 并在
  • Silverlight 4 中的 System.Data.DataTable?

    有谁知道如果系统 数据 数据表Silverlight 4 beta 现在支持吗 过去 我在 ASP NET 和 WinForm 项目中使用它进行数据绑定 其中 UI 和对象需要在运行时构建 如果没有 是否在路线图中 不 这不在 SL4 中
  • 在 React TypeScript 中推断 2 个 props 之间的泛型类型

    我相信这是可能的 但我不太擅长 TS 中的高级输入 还 所以 我想让 React 组件在一个 prop 中接受任何对象形状的数组 然后在不同的 事件函数 prop 中发出相同类型 interface Props data AnyGeneri
  • CGAffineTransform之后转换父/子UIView之间的坐标

    在我开始手工做所有事情之前 我想问一下框架是否可以提供一些帮助 我有一个 UIView 其中包含另一个带有地图的 UIView 父 UIView 包含地图的一些图例 最初我在地图视图中定义一些坐标 例如 100 40 并在父视图中放置一块图
  • Javascript-获取悬停元素的背景颜色

    我目前正在制作一个 google chrome 扩展 并使用此 javascript 动态更改悬停元素的背景颜色 var bindEvent function elem evt cb see if the addEventListener
  • 摄取附件需要更多权限

    我有一个应用程序 当我进行 apt 升级时 它使用elasticsearch Configuring Elasticsearch gt removing ingest attachment gt Downloading ingest att
  • Flutter:如何流式传输由不带 mp3 扩展名的 http url 提供的实时音频

    如何使用 flutter 流式传输由不带 mp3 扩展名的 http url 提供的实时音频 它不是远程文件 但是像网络广播这样的流媒体网址 您可以使用包https pub dev packages url audio stream htt
  • Wi-Fi Direct UWP 超时(HRESULT 异常:0x800705B4)

    我正在使用 UWP API 启动 Wi Fi Direct 接入点服务 开始正常 我在用着WiFiDirectConnectionListener使用以下命令监视连接到接入点的设备ConnectionRequested事件 var conn
  • 如何为 aws gateway API 创建预签名 URL

    我已经看到 S3 对象的预签名 URL 是否可以为 API 网关创建预签名 URL 我已经经历过文档 https docs aws amazon com general latest gr signing aws api requests
  • 类和结构的使用[重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中什么时候应该使用类还是结构 https stackoverflow com questions 54585 when should you use a class vs a struct i
  • CSS 渐变内部渐变

    是否可以使用渐变作为渐变内的颜色之一 出于我的特定目的 我有一个从左到右的初始渐变 linear gradient to right red darkgray 但我希望深灰色部分实际上是从上到下的渐变 linear gradient to
  • 服务器端只进游标破坏@@IDENTITY

    这是一个最小的重现示例 数据库 CREATE TABLE temp x int IDENTITY 1 1 y int 代码 使用VBA和ADO Public Sub repro Dim cn As New Connection Dim rs