gpt4 book ai didi

sql-server - 如何在 SQL Server 中调试合并?

转载 作者:行者123 更新时间:2023-12-02 12:16:04 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 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 的优秀博客文章 Dr. OUTPUT or: How I Learned to Stop Worrying and Love the MERGE这展示了该技术以及如何使用它

基本上归结为使用 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;

关于sql-server - 如何在 SQL Server 中调试合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com