UPSERT ステートメント
UPSERT ステートメントは、既存のレコードを更新するか、既存のレコードが識別されない場合は新しいレコードを作成します。
Upsert の設定
Upsert は、UMSaaSCloud で明示的に外部キーになるように定義されたフィールドでのみ実行できます。次のクエリで示すように、ExternalIdColumn というカラムにこのフィールドの名前を指定する必要があります。
UPSERT INTO Lead (FirstName, LastName, Company, External_Id_Column__c, ExternalIdColumn) VALUES ('Bob', 'Thorton', 'Universal Pictures', 12345, 'External_Id_Column__c')
ExternalIdColumn を表示させるには、UMSaaSCloud の接続プロパティを変更して、PseudoColumns フィールドを引用符なしの値'*=*' に設定します。
UPSERT ステートメントは、既存のレコードを更新するか、既存のレコードが識別されない場合は新しいレコードを作成します。
UPSERT 構文
UPSERT 構文は挿入の構文と同じです。UMSaaSCloud はVALUES 句で指定された入力を使用して、レコードがすでに存在するかどうかを判断します。レコードが存在しない場合は、レコードの挿入に必要なすべてのカラムが指定される必要があります。テーブル固有の情報については、データモデル を参照してください。
UPSERT INTO <table_name>
( <column_reference> [ , ... ] )
VALUES
( { <expression> | NULL } [ , ... ] )
<expression> ::=
| @ <parameter>
| ?
| <literal>
次の例に示すように、ExecuteNonQuery メソッドを使って、データ操作コマンドを実行し影響を受けた行を取得できます。
C#
String connectionString = "AuthScheme=Basic;User=myUser;Password=myPassword;Security Token=myToken;"; int rowsAffected; using (UMSaaSCloudConnection connection = new UMSaaSCloudConnection(connectionString)) { UMSaaSCloudCommand cmd = new UMSaaSCloudCommand("UPSERT INTO Account (Name) VALUES ('John')", connection); rowsAffected = cmd.ExecuteNonQuery(); }
VB.NET
Dim connectionString As [String] = "AuthScheme=Basic;User=myUser;Password=myPassword;Security Token=myToken;" Dim rowsAffected As [Integer] Using connection As New UMSaaSCloudConnection(connectionString) Dim cmd As New UMSaaSCloudCommand("UPSERT INTO Account (Name) VALUES ('John')", connection) rowsAffected = cmd.ExecuteNonQuery() End Using
生成されたId の取得
次の例に示すように、最後に挿入されたレコードのId を取得するには、SCOPE_IDENTITY 関数を使用します。
C#
cmd = connection.CreateCommand(); cmd.CommandText = "SELECT SCOPE_IDENTITY()"; Object returnedValues = cmd.ExecuteScalar(); String Id = (String)returnedValues;
cmd = connection.CreateCommand()
cmd.CommandText = "SELECT SCOPE_IDENTITY()"
Dim returnedValues As [Object] = cmd.ExecuteScalar()
Dim Id As [String] = returnedValues