繁体   English   中英

SQL 2008 R2:尝试使T-SQL MERGE语句在存储过程中工作

[英]SQL 2008 R2: Trying to get the T-SQL MERGE statement working in a stored procedure

我看过SQL Merge语句的各种示例。尽管由于某些原因,我似乎无法从Merge测试中获得正确/预期的结果,但所有这些看起来都很出色。

快速概述:我有一个简单的表,其中包含一些设计数据。阅读有关MERGE的信息似乎指向执行“更新”的更有效方法(即:根据记录是否存在插入或更新)。

因此,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条记录中,所有这些似乎都已更新,当很明显我只能看到一条与更新匹配的记录时。奇怪的是,如果我传递了一些新数据(设计名称)和designcode),我似乎得到了重复的插入..从我的上次测试来看,我似乎发现了7个新插入,这不仅仅是a幸。

希望我已经正确地解释了这一点..攻击新事物的一部分主要是使上下文正确吗?

预先感谢您的任何反馈。

PS:抱歉,合并语句的末尾有一个分号! 完成语法检查/语法。

您将designs用作目标表和源表:

merge designs as ds
using ( select designname, designcode from designs) as dsi

这等效于:

merge designs as ds
using designs as dsi

而是尝试将变量作为源表传递:

merge designs as ds
using (
      select  @passedDesignName as designname
      ,       @passedDesignCode as designcode
      ) as dsi
on (ds.esignName = dsi.designname and ds.designCode = dsi.designcode)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM