【发布时间】:2015-10-03 00:41:20
【问题描述】:
我正在尝试使用 SQL Server 的 Merge 语句对单个表执行 upsert。
declare @Mergeoutput table (action varchar(50))
declare variables ...
MERGE Usertable AS target
using (Select .... from Usertable where filter conditions using variables)
as Source (column names..)
on source.... = target.... (multiple statements)
WHEN MATCHED THEN
UPDATE SET....
WHEN NOT MATCHED by target THEN
INSERT (...)
VALUES (...)
output $action into @Mergeoutput;
select * from @Mergeoutput
如果有匹配则更新有效,但没有匹配时插入不会发生。 @Mergeout 是空的。我的更新和插入语句应该对一行执行操作。当 using 语句为空集并且我想插入新行时,Merge 是如何工作的?
更新:
这是运行一切的 SQL。我希望@Mergeoutput 返回“插入”并且 Person 表有一个新行。
Create table Person
(
name varchar(20)
)
declare @Mergeoutput table (action varchar(50))
declare @newName varchar(20)
select @newName = 'John'
MERGE Person AS target
using (Select name from Person where name= 'John')
as Source (name)
on source.name = target.name
WHEN MATCHED THEN
UPDATE SET name = 'John2'
WHEN NOT MATCHED THEN
INSERT (name)
VALUES ('John')
output $action into @Mergeoutput;
select * from @Mergeoutput
select * from person
【问题讨论】:
-
请为sqlfiddle.com 准备样本表和所需的输出。有点不清楚你想要实现什么。看起来像here
-
sqlfiddle 不断给我合并语句的错误。请参阅上面的更新。
-
看起来没人知道我确实提到源是一个空集,因此不会插入合并
标签: sql-server sql-server-2012