X++ データの選択と操作の概要
データベースに格納されているデータを取得し変更するため、SQL ステートメントを対話式またはソース コード内で使用することができます。 これらのタスクには、select ステートメントおよび API メソッドを使用できます。
データの選択: 表示または変更するデータを選択します。
- select ステートメント – レコードをフェッチします。
データの挿入: 1 つ以上の新しいレコードをテーブルに追加します。
- insert および doInsert メソッド – 一度に 1 つのレコードを挿入します。
- insert_recordset、RecordInsertList.insertDatabase、および RecordSortedList.insertDatabase メソッド – 複数のレコードを同時に挿入します。
データの更新: 既存のテーブル レコードでデータを変更します。
- update および doUpdate メソッド – 一度に 1 つのレコードを更新します。
- update_recordset ステートメント – 複数のレコードを同時に更新します。
データの削除: 既存のレコードをテーブルから削除します。
- delete および doDelete メソッド – 一度に 1 つのレコードを削除します。
- delete_from ステートメント – 複数のレコードを同時に削除します。
データ アクセスに使用するその他のステートメントを次に示します。
- while select ステートメント
- select 式
- next ステートメント
トランザクションの整合性 により、データの破損を防ぎ、スケーラビリティを向上させることができます。
セット ベースからレコード単位への操作の変換の記事では、レコード セット ベースのステートメントおよびメソッドをより効率的に使用するための情報を提供します。
SysDa クラスを使用してデータを取得および変更することもできます。 拡張可能な SysDa API では、X++ で使用できるほとんどすべてのデータアクセス可能性が提供されます。
executeQueryWithParameters API は、SQL インジェクション攻撃の軽減 に役立ちます。
結合の使用の詳細については、Exists 結合および Notexists 結合についてのよくある誤解 を参照してください。
SQL ステートメントのタイムアウト
上記のすべての SQL ステートメントには、発行するセッション タイプに応じて、ステートメントごとにタイムアウトが設定されます。
- 対話型 セッション - 30 分。
- 非対話型 (バッチ、サービス、OData) - 3 時間。
ブロックが原因で、または予想以上のデータ量やクエリ プランの問題で、ステートメントがタイムアウトした場合、メッセージクエリの実行中に、データベース内でタイムアウトが発生しました。と共に型の例外 Exception::Timeout がスローされます。X++ では、この例外に基づく処理タイムアウト例外および再試行を許可します。 既定のタイムアウトは、queryTimeout API を呼び出すことによって上書きできます。