Джейкоб задал идеальный вопрос:дайте мне синтаксис 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
в USING foo
для, если это не важно (кроме действительно важного).
Что использует USING
, когда он использует foo, когда я использую синтаксис SQL Server 2008 MERGE?
Что такое синтаксис 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 Имя пользователя varchar(50) Имя varchar(50) Фамилия varchar(50) Метод аутентификации varchar(50)
Обновление:
USING
Где table_source
:
table_or_view_name [ [ AS ] table_alias ] [ ]
[ WITH ( table_hint [ [ , ]...n ] ) ]
| rowset_function [ [ AS ] table_alias ]
[ ( bulk_column_alias [ ,...n ] ) ]
| user_defined_function [ [ AS ] table_alias ]
| OPENXML
| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
|
|
|
Где joined_table
:
undefined
Где pivoted_table
:
undefined
Где unpivoted_table
это:
undefined