Якоб задал идеальный вопрос: дать мне синтаксис MERGE.
Каждый ответ там сразу переходит в самый сложный случай, о котором они могут подумать; скрывая синтаксис с посторонней путаницей.
Марк дал ответ:
MERGE 
   member_topic AS target
USING 
   someOtherTable AS source
ON 
   target.mt_member = source.mt_member 
   AND source.mt_member = 0 
   AND source.mt_topic = 110
WHEN MATCHED THEN 
   UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN 
   INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
; 
Глядя на этот ответ, я так же смущен, как Джейкоб:
У меня нет someOtherTable
Марк предположил, что someOtherTable является фиктивным значением-заполнителем - не имеет значения, что у вас нет этой таблицы.
Я пытаюсь это сделать, и SQL Server жалуется
Недопустимое имя объекта 'someOtherTable'.
Это оставляет мне попытку понять, что означает USING in USING foo, если это не важно (кроме действительно важных).
Что используется USING при использовании foo при использовании синтаксиса MERGE SQL Server 2008?
Бонусный вопрос
Что такое синтаксис UPSERT с помощью MERGE:
IF (rowExists)
   UPDATE Users SET Firstname='Ian', LastName='Boyd' WHERE Username='iboyd'
ELSE
   INSERT INTO Users (UserGUID, Username, FirstName, LastName, AuthenticationMethod)
   VALUES ('{77410DC5-7A3E-4F1A-82C6-8EFB3068DE66}', 'iboyd', 'Ian', 'Boyd', 'Windows')
становится (точный код, который я пробовал):
begin transaction
    MERGE 
       Users
    USING 
       foo
    ON  
       Users.UserName = foo.UserName
    WHEN MATCHED THEN
        UPDATE SET Firstname = foo.FirstName, Lastname = foo.LastName
    WHEN NOT MATCHED THEN
        INSERT (UserGUID, Username, FirstName, LastName, AuthenticationMethod)
        VALUES ('{77410DC5-7A3E-4F1A-82C6-8EFB3068DE66}', 'iboyd', 'Ian', 'Boyd', 'Windows')
    ; --A MERGE statement must be terminated by a semi-colon (;).
rollback
Msg 208, Level 16, State 1, Line 3
Invalid object name 'foo'.
?
С таблицей
Users, содержащей столбцы:UserGUID uniqueidentifier Username varchar(50) FirstName varchar(50) LastName varchar(50) AuthenticationMethod varchar(50)
Update:
USING <table_source> 
Где table_source:
table_or_view_name [ [ AS ] table_alias ] [ <tablesample_clause> ] 
    [ WITH ( table_hint [ [ , ]...n ] ) ] 
| rowset_function [ [ AS ] table_alias ] 
    [ ( bulk_column_alias [ ,...n ] ) ] 
| user_defined_function [ [ AS ] table_alias ]
| OPENXML <openxml_clause> 
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ] 
| <joined_table> 
| <pivoted_table> 
| <unpivoted_table> 
Где joined_table:
undefined
Где pivoted_table:
undefined
Где unpivoted_table:
undefined