sql server 如何在有多个选项的更新语句中选择值?

2023-12-24

我在 SQL Server 中有一个更新语句,其中可以根据连接分配四个可能的值。 SQL 似乎有一种算法可以选择一个值而不是另一个值,但我不确定该算法是如何工作的。

举个例子,假设有一个名为 Source 的表,其中有两列(匹配和数据),结构如下: (匹配列仅包含 1,数据列每行递增 1)
匹配数据
`--------------------------
1 1
1 2
1 3
1 4

该表将更新另一个名为 Destination 的表,其结构相同的两列如下:
匹配数据
`--------------------------
1 NULL

如果您想通过以下方式更新 Destination 中的 ID 字段:

UPDATE
目的地
SET
数据=源.数据 从
目的地
内部联接
来源
ON
目标.匹配 = 源.匹配

运行此查询后,Destination.ID 将设置为四个可能的选项。我发现弄乱源的索引会对目标的设置产生影响,并且 SQL Server 似乎只是用它找到的第一个匹配的值更新目标表。

准确吗? SQL Server 是否有可能按顺序用每个可能的值更新目标,而我最终得到的结果与用它找到的第一个值进行更新时的结果相同?它似乎会随机选择一行进行更新,而不是在出现这种情况时抛出错误,这似乎可能是有问题的。

谢谢。

附:对于糟糕的格式,我深表歉意。希望意图是明确的。


It sets all结果到数据。查询后最终得到哪一个取决于返回结果的顺序(最后设置哪一个)。

由于没有 ORDER BY 子句,因此您可以使用 Sql Server 给出的任何顺序。这通常遵循磁盘上记录的物理顺序,而通常又遵循表的聚集索引。但这个顺序并不是一成不变的,特别是在涉及连接时。如果联接与具有聚集索引以外的索引的列相匹配,则它很可能会根据该索引对结果进行排序。最后,除非您给它一个 ORDER BY 子句,否则 Sql Server 将以它认为最快的顺序返回结果。

您可以通过将更新查询转换为选择查询来玩这个,这样您就可以看到结果。请注意对于目标表的每条记录,源表中哪条记录位于最前面,哪条记录位于最后。将其与更新查询的结果进行比较。然后再次使用您的索引并再次检查结果以查看您得到的结果。

当然,这里可能很棘手,因为 UPDATE 语句不允许使用 ORDER BY 子句,因此无论您找到什么,您都应该真正编写连接,以便它与目标表 1:1 匹配。您可能会发现 APPLY 运算符对于实现此目标非常有用,并且您可以使用它来有效地联接到另一个表并保证联接仅匹配一条记录。

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

sql server 如何在有多个选项的更新语句中选择值? 的相关文章

随机推荐

  • 如何根据标点符号和空格分割字符串?

    我有一个String我想根据标点符号和空格进行分割 的正则表达式参数应该是什么split method 带有一些怪异处理的代码 请注意 它会跳过输出循环中的空标记 这又快又脏 您可以将需要拆分和删除的任何字符添加到正则表达式模式中 tchr
  • 透明背景的颤动角半径

    下面是我的代码 我希望渲染一个具有透明背景的圆角容器 return new Container padding const EdgeInsets all 32 0 height 800 0 color const Color 0xffDC1
  • 为什么堆内存使用量和加载的类数量不断增加?

    我在用JVM Explorer 链接到 JVM 资源管理器 http jvmmonitor org doc index html 来分析我的 Spring 应用程序 我对此有以下问题 为什么 已用堆内存 在申请后仍然不断增加 已启动但尚未收
  • bootstrap 3在模式弹出后禁用背景[重复]

    这个问题在这里已经有答案了 我正在尝试使用下面给定的代码在我的代码中弹出 bootstrap 3 模式 div class modal fade div class modal dialog div class modal content
  • Android Studio-图像显示在设计视图中但不在模拟器中

    我正在学习 android 应用程序开发 因此 当我构建一个简单的应用程序以在屏幕上显示两个图像时 我使用了 ImageView 图像显示在 android studio 设计屏幕中 但是当我尝试使用运行应用程序时genymotion 模拟
  • 多态性(继承)和值类型

    我有很多类型 PixelMeasure PointMeasure CentimeterMeasure等等 表示带有单位的值 我希望他们有 值语义 例如实际上是不可变的 不必担心内存分配 并且 多态性 我可以返回一个类型的对象Measure并
  • 在 Express 中监听 UDP 消息

    我有一个使用 Express 的基本 Node js 服务器 它需要能够处理 TCP 消息以及 UDP 消息 TCP 部分已启动并运行良好 但现在我需要集成一种嗅探 UDP 消息的方法 我尝试使用以下方法将处理程序添加到过滤器堆栈中dgra
  • java中的toArray与stream.toArray有什么性能差异

    我需要将 ids 列表转换为 ids 数组 我可以通过多种方式做到这一点 但不确定应该使用哪一种 Say 1 ids stream toArray Id new 2 ids toArray new Id ids length 哪一种更有效
  • 使用 XmlDocument 保留 xml 格式

    我正在使用 XmlDocument 来处理 xml 如何使用当前格式保存 XmlDocument 当前格式
  • pdb 绕过错误/跳转失败:只能从“行”跟踪事件跳转

    我正在尝试使用 pdb 调试 Python 程序 程序可能是这样的 def main a 1 print b c 2 d 3 显然 print b 是一个拼写错误 应该是 print a 但这并不重要 我可以用文本编辑器修复它 但我想绕过这
  • Linux系统上打印文件的uid

    我正在学习c编程 我正在尝试让我自己的程序类似于ls命令但选项较少 我正在做的是将输入目录 文件名作为参数 然后获取所有目录条目direntstruct 如果是目录 之后我使用 stat 获取文件的所有信息 但是当我使用 write 打印这
  • Node.js:类型错误:对象不是函数

    我有一个奇怪的错误 var http require http var request require request http createServer function request response response writeHe
  • 如何高效替换XML的多个节点?

    我试图一次性替换单个文档的大约 500 个节点 并且我的数据库中有 5000 多个文档 我正在使用的代码与我之前问过的这个问题相关 Link https stackoverflow com questions 51998598 how to
  • EJB3.1 系统异常与 javax.ejb.EJBException

    在提出我的问题之前 先介绍一下 EJB3 1 异常的背景知识 应用程序例外包括 用户定义的已检查或未检查异常 ApplicationException注解 所有已检查的异常 java lang Exception及其子类异常 除了 java
  • 更改 IP 地址后 Riak 节点不再工作

    我使用实例化 Amazon EC2 虚拟 Ubuntu 12 04 服务器作为我的单个 Riak 节点 我已经使用 basho 网站上的指南完成了在实例上设置 Riak 的所有正确阶段here http docs basho com ria
  • 使用 Queue::fake() 测试监听器

    我的 Laravel 5 5 应用程序有一个Product模型 这Product模型有一个dispatchesEvents属性看起来像这样 The event map for the model var array protected di
  • 内存使用量指标标识符 Google Compute Engine

    我已经在我的实例组磁盘中安装了监控代理 我需要根据内存使用情况自动缩放实例 但是当我要在 GCE Web 控制台中配置目标指标时 我错过了内存使用指标标识符 缺少哪个标识符或者如何根据内存使用情况自动缩放我的组 None
  • 反应式编程的优点/缺点

    我不断研究和尝试使用 Reactor 和 RxJava 的响应式编码 我确实明白 与单线程执行相比 反应式编码可以更好地利用 CPU 在基于 Web 的应用程序中 反应式编程与命令式编程之间有具体的比较吗 与非反应式编程相比 使用反应式编程
  • 如何防止 BIDS 自动签出 SSIS 包?

    当编辑文件时 我将 Visual Studio 2005 BIDS 设置为 自动签出 这对于大多数文件类型都适用 但是 当我访问 SSIS 包中的数据流时 会触发签出 而无需我进行任何更改 当我比较这些文件时 后台似乎也没有进行任何更改 这
  • sql server 如何在有多个选项的更新语句中选择值?

    我在 SQL Server 中有一个更新语句 其中可以根据连接分配四个可能的值 SQL 似乎有一种算法可以选择一个值而不是另一个值 但我不确定该算法是如何工作的 举个例子 假设有一个名为 Source 的表 其中有两列 匹配和数据 结构如下