我查看了 SQL Merge 语句的各种示例。所有这些看起来都很棒,尽管由于某种原因,我似乎无法从 Merge 测试中获得正确/预期的结果。
快速概述: 我有一个简单的表,其中包含一些设计数据。阅读有关 MERGE 的信息似乎指向了一种更有效的“upsert”方式(即:插入或更新,取决于记录是否存在)。
所以 SQL 2008 代码是这样的(对不起,如果它不完整,因为我正在处理它!):
这将在一个存储过程中,所以 @values 显然是传递的参数..
merge designs as ds
using ( select designname, designcode from designs) as dsi
on (@passedDesignName = dsi.designname and @passedDesignCode = dsi.designcode)
when matched then
update set ds.designname = @passedDesignName, ds.designcode = @passedDesignCode
when not matched then
insert (designname, designcode)
values (@passedDesignName, @passedDesignCode)
问题似乎出在我正在测试的 7 条记录中,它们似乎都已更新,但显然我只能看到一条与更新匹配的记录。奇怪的是,如果我传递了一些新数据(设计名称和设计代码),我似乎得到了一个重复的插入..从我上次的测试来看,似乎有 7 个新的插入,我猜这不仅仅是侥幸..
希望我已经正确解释了这一点。攻击新事物的一部分主要是使上下文正确吗?
提前感谢您的任何反馈。
PS:对不起,merge语句末尾有分号!完成解析检查/语法。