Якоб задал идеальный вопрос: дать мне синтаксис 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