intra-mart Accel Platform では、SqlServerを利用する場合、JDBCの接続プロパティに selectMethod=cursor を設定します。
この接続プロパティを使用すると、問い合わせの結果セットの行が限定された数だけクライアント( intra-mart Accel Platform )のメモリに保持されます。これにより、大量のデータを保持することがないため、メモリの枯渇などを防止する効果があります。
intra-mart Accel Platform では、 この設定を必ず使用してください。
ただし、この設定により、以下の弊害が発生します。
一般的には、Microsoft SqlServerでシーケンステーブルを利用する場合、以下のSQL文を使用します。
SELECT NEXT VALUE FOR Seq1
TenantDatabase の API や IM-LogicDesigner の SQL定義を利用して、このSQL文を実行すると2回インクリメントされた値が取得されます。
これは、JDBC のメソッドを直接利用した場合でも同様です。
これを回避する方法として、以下のSQL文を利用することで、1回インクリメントされた値が取得できることを確認しています。
シーケンステーブル名がSeq1の場合
SELECT NEXT VALUE FOR Seq1 AS seq_no FROM sys.sequences WHERE name = 'Seq1
FROM句とWHERE句を記述することで、必ず1レコードのみが取得されるようにします。
これで、レコード取得時に1度だけ採番されます。
上記のSQL文は、調査した結果の一例です。
実際に使用される場合は、検証を行い、期待通りの結果となること確認してから、ご利用をお願いします。