[英]Stored procedure parameters with literals not working in SQL Server 2008 R2
[英]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.