UPSERT ステートメント
UPSERT ステートメントは、既存のレコードを更新するか、既存のレコードが識別されない場合は新しいレコードを作成します。
UPSERT 構文
UPSERT 構文はINSERT 構文と同じです。Microsoft Dynamics 365 はVALUES 句で指定された入力を使用して、レコードがすでに存在するかどうかを判断します。レコードが存在しない場合は、レコードの挿入に必要なすべてのカラムが指定される必要があります。テーブル固有の情報については、データモデル を参照してください。
UPSERT INTO <table_name>
( <column_reference> [ , ... ] )
VALUES
( { <expression> | NULL } [ , ... ] )
<expression> ::=
| @ <parameter>
| ?
| <literal>
次の例に示すように、ExecuteNonQuery メソッドを使って、データ操作コマンドを発行し影響を受けた行を取得できます。
C#
String connectionString = "InitiateOAuth=GETANDREFRESH;OrganizationUrl=https://myaccount.operations.dynamics.com/;Edition=Sales;";
int rowsAffected;
using (Dynamics365Connection connection = new Dynamics365Connection(connectionString)) {
Dynamics365Command cmd = new Dynamics365Command("UPSERT INTO GoalHeadings (GoalHeadingId) VALUES ('John')", connection);
rowsAffected = cmd.ExecuteNonQuery();
}
VB.NET
Dim connectionString As [String] = "InitiateOAuth=GETANDREFRESH;OrganizationUrl=https://myaccount.operations.dynamics.com/;Edition=Sales;"
Dim rowsAffected As [Integer]
Using connection As New Dynamics365Connection(connectionString)
Dim cmd As New Dynamics365Command("UPSERT INTO GoalHeadings (GoalHeadingId) VALUES ('John')", connection)
rowsAffected = cmd.ExecuteNonQuery()
End Using
生成されたId の取得
最後に挿入されたレコードのGoalHeadingId を取得するには、次の例に示すように、SCOPE_IDENTITY 関数を使用します。
C#
cmd = connection.CreateCommand(); cmd.CommandText = "SELECT SCOPE_IDENTITY()"; Object returnedValues = cmd.ExecuteScalar(); String GoalHeadingId = (String)returnedValues;
cmd = connection.CreateCommand()
cmd.CommandText = "SELECT SCOPE_IDENTITY()"
Dim returnedValues As [Object] = cmd.ExecuteScalar()
Dim GoalHeadingId As [String] = returnedValues