Что такое USING в синтаксисе SQL Server 2008 MERGE?

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

20
задан Community 23 May 2017 в 12:03
поделиться