如何在 SQL Server 中调试合并?

2024-05-01

我正在尝试学习如何使用 MERGE 运算符。以下代码可以正确编译:

    ALTER PROCEDURE moto.procPM_UpdateLines
@LineId As Int = null,
@LineName As Varchar(100),
@DeleteMe As Bit = 0
    AS
    BEGIN

    MERGE moto.tblPMLine AS line
    USING (SELECT LineId, LineName FROM moto.tblPMLine) AS existsLine
    ON line.LineId = existsLine.LineId
    WHEN MATCHED AND @DeleteMe = 1 THEN DELETE
    WHEN MATCHED AND @DeleteMe = 0 THEN UPDATE SET line.LineName = @LineName
    WHEN NOT MATCHED THEN INSERT(LineName) VALUES(@LineName);
    END
    GO

我知道这是一个非常简单的过程,但由于某种原因,当我使用以下命令时,它似乎没有生成任何条目。

    execute moto.procPM_UpdateLines null, 'First test', 0

有没有办法让我知道它遵循的是哪个选项(如果有的话)?


以前的存储过程已修复。

   MERGE INTO moto.tblPMLine AS T
   USING (SELECT @LineId as LineId, @LineName as LineName) AS S
   ON T.LineId = S.LineId
   WHEN MATCHED AND @DeleteMe = 0 THEN --UPDATE
        UPDATE SET LineName = @LineName 
   WHEN MATCHED AND @DeleteMe = 1 THEN --DELETE
        DELETE
   WHEN NOT MATCHED THEN--INSERT
        INSERT (LineName) VALUES (@LineName)    
   OUTPUT $action AS ChangesMade;

现在它可以插入、更新和删除,并返回输出。


你可以结合MERGEOUTPUT子句来获取某种“活动报告”(或调试“打印语句”)MERGE正在做的事情 - 也许这会帮助您了解出了什么问题。

请参阅 Adam Machanic 的精彩博客文章输出博士或:我如何学会停止担忧并热爱合并 http://sqlblog.com/blogs/adam_machanic/archive/2009/08/24/dr-output-or-how-i-learned-to-stop-worrying-and-love-the-merge.aspx展示了该技术以及如何使用它

基本上它归结为使用OUTPUT条款与MERGE声明来获取有关正在发生的事情的信息 - 大致如下:

MERGE INTO ......
WHEN MATCHED THEN
    .......
WHEN NOT MATCHED THEN
    ......
WHEN NOT MATCHED BY SOURCE THEN
    ........
OUTPUT
    $action AS dml_action,
    inserted.x AS new_x,
    deleted.x AS old_x,
    inserted.y AS new_y,
    deleted.y AS old_y;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SQL Server 中调试合并? 的相关文章

随机推荐

  • r-base 和 r-推荐包之间的区别

    谁能告诉我基本包和推荐包之间有什么区别 如果有提到基本包和推荐包的链接 请提供链接 差异实际上来自 R Core 和 R 代码的组织方式 例如在上游 SVN 存储库中 In src library 您拥有所有 基本 包 base 编译器 数
  • 如何构建具有动态元素数量的 JSON?

    我需要构造一个看起来像这样的 JSON 对象 见下文 棘手的部分之一是 accountInfo 是动态的 因为会有 0 到多个键值对 zipCode 123 name bob partner from someCompany account
  • 如何在 HtmlUnit (java) 中禁用或指定重试次数?

    我希望连接重置后不会再次执行 HtmlUnit 中的 Web 请求 以下异常消息显示正在重试连接 INFO I O exception java net SocketException caught when connecting to t
  • 自定义用户代理字符串或标头,无需修改 cordova 库

    我有一个与 ASP NET MVC Web 应用程序交互的 Android Phonegap Cordova 应用程序 我正在尝试检测服务器端是否从浏览器或我的 Phonegap Cordova 应用程序加载网页 我考虑过以下几种方法 更改
  • 谷歌文档文本光标

    我需要创建一个类似于谷歌文档的应用程序 我发现 google 文档不使用任何文本区域 而是使用常规 div 来创建页面 但我不知道他们是如何获得文本光标的 是图像闪烁吗 因为当我尝试使用 Chrome 开发者工具查看网页代码时 我没有看到任
  • 可选择的圆形图像视图,如 Google+

    如何创建一个可选择的循环ImageView就像当前用于个人资料图片的 Google 应用程序一样 这就是我所指的 上图未选中 下图已选中 我尝试一比一复制个人资料图片 到目前为止我的工作 loadedImage is the Bitmap显
  • PHP 删除 JavaScript

    我正在尝试从 HTML 中删除 JavaScript 我无法让正则表达式与 PHP 一起使用 它给了我一个空数组 为什么
  • 如何获取 Jupyter Notebook 的“markdown”单元格中的制表符空间

    我正在编写描述性 ipynb 文件 需要在带有空格的 markdown 中给出输出 但无法添加制表符空间来打印结构化数据 键入 nbsp 以添加一个空格 输入 ensp 添加 2 个空格 输入 emsp 添加 4 个空格 使用不间断空格 n
  • initdb.bin:无效的区域设置;检查 LANG 和 LC_* 环境变量

    当我尝试安装时比特纳米奥多 9在我的 ubuntu 系统中通过终端 我收到以下错误消息 如何解决这个问题 initdb bin invalid locale settings check LANG and LC environment va
  • 如果子节点为空,则删除父节点

    源 XML
  • Hibernate 在运行时更改获取模式

    我有两个使用一对多关系关联在一起的表 雇员 gt 部门 通过雇员表中的department id建立关系 我使用 hibernate 我的 hibernate 映射文件是
  • Rails meta_search gem:按关联模型的计数排序

    我正在使用 meta search 对表中的列进行排序 我的表列之一是特定模型的关联记录的计数 基本上是这样的 class Shop lt ActiveRecord Base has many inventory records def c
  • GWT 将表单参数发送到 servlet

    我正在尝试捕获 servlet 中接下来的两个突出显示的字段 我可以在其中获取上传的文件 源代码与中所示的完全相同GWT FormSubmit 类 Javadoc http google web toolkit googlecode com
  • 如何通过 JavaScript 访问屏幕显示的 DPI 设置? [复制]

    这个问题在这里已经有答案了 有没有办法在 Javascript 函数中访问屏幕显示的 DPI 设置 我试图在页面上放置一个 HTML 面板 当用户的 DPI 设置为大 120 时 它会丢失该位置 我需要知道 DPI 是多少 以便我可以相应地
  • 在 LanguageTool 中,如何创建字典并使用它进行拼写检查?

    如何使用语言工具创建用于拼写检查的词典 我不是 Java 程序员 这是我第一次看到 LT 您好 这是我使用语言工具创建拼写检查词典的经验 希望你喜欢它 Part 1 如何创建字典 你需要 包含字典的 txt 文件 一个 info 文件 指定
  • python请求模块和连接重用

    我正在使用 python 的请求模块进行 HTTP 通信 我想知道如何重用已经建立的 TCP 连接 requests 模块是无状态的 如果我重复调用同一个 URL 的 get 不是每次都会创建一个新连接吗 Thanks 全局函数如reque
  • 如何在 ASP.NET Core 中启用跟踪日志记录?

    我无法获得基本知识LogTrace 我的应用程序中的输出 这是一个重现 使用 Visual Studio 2017 创建新的 ASP NET Core 应用程序 可选 注释掉 UseApplicationInsights 所以重现更清晰 将
  • PyGTK:带线程的 gobject.idle_add() 和 timeout_add()

    是否有任何明确的文档说明idle add timeout add 和 或它们安装的实际回调是否需要锁 任何类型 def work args 1 gtk gdk threads enter needed self ui change some
  • 对于我的智力来说,太多的 order by、max、子查询

    我似乎无法解决这个问题 我确信它需要子查询 但我没有选择 我的大脑无法处理这个或其他事情 我需要帮助 小介绍 我有一个投注赔率网站 每 15 分钟 我都会从不同的博彩公司导入特定赛事的最新赔率 赢 平 输 或 1 X 2 赔率表的每一行都有
  • 如何在 SQL Server 中调试合并?

    我正在尝试学习如何使用 MERGE 运算符 以下代码可以正确编译 ALTER PROCEDURE moto procPM UpdateLines LineId As Int null LineName As Varchar 100 Dele