Что ИСПОЛЬЗУЕТСЯ в синтаксисе SQL Server 2008 MERGE?
Джейкоб задал идеальный вопрос:give me the MERGE
syntax.
Каждый ответ тут же прыгает в самый сложный случай, о котором они только могут подумать; скрытие синтаксиса с посторонним замешательством.
Марк далответ:
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')
;
Глядя на этот ответ, я так же растерялся, как и Джейкоб:
I don't have a someOtherTable
Марк предположил, чтоsomeOtherTable
является фиктивным значением заполнителя - не имеет значения, что у вас нет этой таблицы.
i try it, and SQL Server does complain
Invalid object name 'someOtherTable'.
Это заставляет меня изо всех сил пытаться понять, чтоUSING
вUSING foo
являетсяfor если это не важно (кроме действительно важных).
Что такое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'.
?
With a Users
table that contains the columns:
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