我正在嘗試使用SQL Server的Merge語句對單個表執行upsert。如何使用MERGE的'When not matched'在同一個表中插入新記錄?
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返回'插入'和人表有一個新的行。
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
請用示例表格和所需輸出預先準備http://sqlfiddle.com。這是有點不清楚你想達到什麼。它看起來像[這裏](http://stackoverflow.com/a/10795503/5070879) – lad2025
sqlfiddle不斷給我一個合併語句的錯誤。看到我上面的更新。 –
看起來像沒有人抓住這個事實,我提到源是一個空集,因此合併不會插入 –