ジェイコブは完璧な質問をしました:構文を教えてください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 を持っていません
Marc は、これsomeOtherTable
はダミーのプレースホルダー値であると提案しました。そのテーブルがなくてもかまいません。
試してみると、SQL Serverが文句を言う
オブジェクト名「someOtherTable」が無効です。
それが重要でない場合(実際に重要であることを除いて) 、 USING
inUSING foo
が何のためにあるのかを理解するのに苦労しています。
SQL Server 2008 MERGE 構文を使用しているときにfooUSING
を使用しているときは何を使用していますか?
ボーナス質問
MERGE を使用した UPSERT 構文とは:
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)
アップデート:
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
にある:
未定義
どこpivoted_table
にある:
未定義
どこunpivoted_table
にある:
未定義