> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arc.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CData Upsert の設定

> フロー内のArc メッセージからCData のデータを挿入または更新します。

Upsert アクションは、CData のデータを更新または挿入します。デフォルトでは、CData にレコードがすでに存在する場合、入力から提供された値を使用してCData 内の既存データに対して更新が実行されます。詳細については、[UPSERT クエリの動作](#upsert-query-behavior)を参照してください。

> [!NOTE]
>
> CData コネクタは非推奨です。他のデータベースコネクタとは異なり、Mapping モードをサポートしていないため、Upsert アクションのカラムマッピングには引き続きXML Map コネクタが必要です。

## テーブルとカラム

CData コネクタでUpsert を選択する場合は、CData から対象のテーブル（1つまたは複数）を選択する必要があります。**Tables** ペインの上にある**Add** ボタンをクリックします。

![Add ボタンが表示されたUpsert Configuration パネルのTables セクション。](https://mintcdn.com/cdata-arc/mPTGrzt-QAW42BUU/26.4/images/dbsa_upsert_tableadd.png?fit=max\&auto=format\&n=mPTGrzt-QAW42BUU\&q=85\&s=45b47cae541aab5e798e777341ed91dd)

モーダルが表示され、利用可能なすべてのテーブルが一覧表示されます。目的のテーブルを選択して**Add** をクリックします。

![利用可能なテーブルを一覧表示するAdd Table モーダル。Orders テーブルが選択され、下部にAdd ボタンが表示されている。](https://mintcdn.com/cdata-arc/mPTGrzt-QAW42BUU/26.4/images/dbsa_tablelist.png?fit=max\&auto=format\&n=mPTGrzt-QAW42BUU\&q=85\&s=60f089dec2cb7c941456ace30db249a4)

選択したテーブルが**Tables** ペインの下に表示され、テーブル内のカラムが**Columns** ペインの下に表示されます。コネクタは、特別な意味を持つ値（主キーや外部キーなど）を自動的に検出し、それに応じてラベルを付けます。

![Orders テーブルが選択されたUpsert Configuration パネル。Columns ペインでId カラムのUPSERT トグルがON に設定され、UPSERT by フィールドがId に設定されている。](https://mintcdn.com/cdata-arc/mPTGrzt-QAW42BUU/26.4/images/dbsa_upsert_columns.png?fit=max\&auto=format\&n=mPTGrzt-QAW42BUU\&q=85\&s=b31a18fcd3fffa9977f3b4058bee296f)

デフォルトでは、すべてのカラムがCData コネクタのアクションに含めるように選択されています。個々のカラムを除外するには、チェックを外します。

> [!NOTE]
>
> **Add** をクリックしてこのプロセスを繰り返すことで、さらにテーブルを選択できます。詳細については、[子テーブル](https://docs.arc.cdata.com/26.4/cloud/ja/connectors/cdata/cdata-ac.md#child-tables)を参照してください。

## UPSERT クエリの動作

デフォルトでは、カラムマッピングの**UPSERT** スライダーは**ON** に設定されています。これは、UPSERT マッピングが、レコードを挿入する前（一致するレコードがない場合のINSERT）か、更新する前（レコードがすでに存在する場合のUPDATE）かを判定するために、対象にレコードが存在するかどうかを判断することを意味します。

![Id カラムでUPSERT ON トグルがハイライトされたUpsert Configuration パネル。](https://mintcdn.com/cdata-arc/mPTGrzt-QAW42BUU/26.4/images/dbsa_upsert_slider.png?fit=max\&auto=format\&n=mPTGrzt-QAW42BUU\&q=85\&s=8aa832efd3b112703c476e4f0f4d3002)

その値を判定するために使用されるクエリは、以下のセクションで説明するロジックによって決定されます。

### UPSERT スライダーをON に設定

スライダーが**ON** に設定されている場合、クエリの動作は**UPSERT By** および**Perform this query...** のラジオボタンで選択した内容に基づいて変化します。

#### Id によるUPSERT

入力XML にキーカラムが存在する場合、一致するキーを持つレコードが存在するかどうかを判定するために、データベースにクエリが発行されます：

```text theme={null}
The action type is UPSERT and an UPSERT query is not specified. The key column [Id] is present and will be determined using an automatically generated UPSERT query.
SELECT COUNT(*) AS [count] FROM [Orders] WHERE [Id] = @Id; @Id='123'
```

一致した場合は更新が行われ、一致しない場合は挿入が行われます。

入力XML にキーカラムが存在しない場合、レコードは常に挿入されます：

```text theme={null}
The key column Id was not specified, INSERT will be executed.
The action type is UPSERT or an UPSERT query is specified. The key column is not present. Record will be INSERTED.
```

#### 非キーカラムによるUPSERT

選択した**UPSERT By** カラムに一致する値を含むレコードが存在するかどうかを判定するために、テーブルの主キーを選択することにより、データベースにクエリが発行されます：

```sql theme={null}
SELECT [Id] FROM [Orders] WHERE [OrderId] = @OrderId; @OrderId='12345'
```

SELECT クエリは、SELECT ステートメントにおいて常にテーブルのキーカラムを対象とします。一致が成功した場合、入力XML のデータがデータソースに更新されます。一致しない場合は、代わりにレコードが挿入されます。

> [!NOTE]
>
> 選択した**UPSERT By** カラムが入力で指定されていない場合、次のクエリに示すように、NULL 値でルックアップが使用されます。

```sql theme={null}
SELECT [Id] FROM [Orders] WHERE [OrderId] = @OrderId; @OrderId=NULL
```

#### カスタムクエリの使用

UPSERT キーを選択するためのカスタムクエリを記述することもできます。このオプションを使用すると、単一のカラムの一致だけでなく、より複雑なロジックを使用してルックアップを実行できます。次のクエリを考えてみましょう：

```sql theme={null}
SELECT [Id] FROM [Orders] WHERE [OrderId] = @OrderId AND Status = 'Active'
```

この例では、UPDATE に適切な条件を提供するために、テーブルのキーカラムを選択する必要があります。`@OrderID` 構文は、一致する入力XML から値を参照するために使用されます。静的な値を使用することもできます。`'Active'` を囲む引用符は、この句が静的な値を使用していることを示します。

ここでも、キーカラムの一致が成功すると、更新リクエストの形成に使用されます。一致しない場合は、レコードが挿入されます。

> [!TIP]
>
> データベースへの挿入の動作について疑問がある場合は、UPSERT 試行の`.log` ファイルを確認してください。動作を導くために使用されたロジックの完全な内訳がログファイルに送信されます。

### UPSERT スライダーをOFF に設定

スライダーが**OFF** に設定されている場合、コネクタはすべてのクエリを単純にデータベースに挿入します。入力マッピングのコードビューを確認すると、テーブルの`action` 属性が`insert` になっていることがわかります：

```xml theme={null}
<Items>
    <Orders table="`Orders`" action="insert">
```

主キーが存在するかどうかにかかわらず、テーブルに発行されるすべてのクエリは挿入として扱われます。受信したすべてのレコードをテーブルに対して更新するには、次のスニペットに示すように、このアクションキーワードを`update` に設定できます：

```xml theme={null}
<Items>
    <Orders table="`Orders`" action="update">
```

> [!WARNING]
>
> アクションが`update` として定義されている場合、アプリケーションはテーブルのキーカラム（例えばId）が存在することを期待します。キーカラムが提供されていない場合、UPDATE コマンドの効果は対象のデータベースタイプによって異なる可能性があるため、予想より多くの行が変更されたり、まったく変更されなかったりする場合があります。

## Arc フローの例

Upsert で構成されたCData コネクタのテーブルとカラムを選択したら、そのコネクタをArc フローの末尾に配置します。次のスクリーンショットは、File コネクタ、CSV コネクタ、XML Map コネクタ、および末尾のCData Upsert コネクタから成るフローの例を示しています：

![File\_Receive、CSV1、XMLMap1、CData\_Upsert の4つのコネクタが順に並んだArc フローの例。](https://mintcdn.com/cdata-arc/pXe_oAwLTI7MI6MK/26.4/images/cdata_xmlflow_upsert.png?fit=max\&auto=format\&n=pXe_oAwLTI7MI6MK\&q=85\&s=a0b958a15496e3611d73ba0835852b75)

このフローの例では、データは次の手順を通過します：

<ol>
  <li>File コネクタがディスクからCSV ファイルを取得してフローに取り込みます。</li>
  <li>**CSV1** コネクタがCSV ファイルをXML に変換します。</li>
  <li>このデータは**Source File** として**XML\_Map** コネクタに渡され、**Source** ツリーにマッピングされます。</li>
  <li>**CData\_Upsert** コネクタからのデータは**Destination File** として**XML\_Map** コネクタに渡され、**Destination** ツリーにマッピングされます。 ![XML Map コネクタのMapping インターフェース。左側にSource ツリー（source.xml）、右側にDestination ツリー（destination.xml）が表示され、要素間のマッピングはまだ描画されていない。](https://mintcdn.com/cdata-arc/mPTGrzt-QAW42BUU/26.4/images/dbsa_xmlmap_upsert.png?fit=max\&auto=format\&n=mPTGrzt-QAW42BUU\&q=85\&s=0a16821dfd319da0de252249f8a9a1ce)</li>
  <li>**XML\_Map** コネクタは、**Source** 要素を同じ名前の**Destination** 要素に自動的にマッピングしようとします。これらは手動で変更でき、**Source** から**Destination** へ要素をドラッグすることで空のマッピングを補完できます。 ![XML Map コネクタのMapping インターフェース。Source ツリーの要素がDestination ツリーにマッピングされ、first からfirstName、last からlastName のように曲線で接続されている。](https://mintcdn.com/cdata-arc/mPTGrzt-QAW42BUU/26.4/images/dbsa_xmlmap_elements.png?fit=max\&auto=format\&n=mPTGrzt-QAW42BUU\&q=85\&s=e160cb65b3524cee799144326bb013f9)</li>
  <li>**CData\_Upsert** コネクタは、マッピングに従ってUpsert を実行し、結果のデータをCData に渡します。</li>
</ol>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.