MS-SQL、「インデックスが重複しています」の動きについて
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
nkmt
投稿数: 1668

atushi様、こんばんは。
前回に引き続き今回も有難うございました。
[設定][データベース][MSSQL][特性][データベース情報]に
[CHECK_KEY=Y]を設定した所、Pervasiveの時と同様の
インデックス重複チェックが出来る事を確認致しました。
とりあえずこの方式でテストを行ってみたいと思っております。
他のご説明も大変参考になりました。
前回に引き続き今回も有難うございました。
[設定][データベース][MSSQL][特性][データベース情報]に
[CHECK_KEY=Y]を設定した所、Pervasiveの時と同様の
インデックス重複チェックが出来る事を確認致しました。
とりあえずこの方式でテストを行ってみたいと思っております。
他のご説明も大変参考になりました。
投票数:4
平均点:10.00
atushi
居住地: 長野県
投稿数: 30

nkmt様、こんにちは
・以前ダウンロードした[Tutorial_SQL.PDF]より抜粋
SQL系のデフォルトでは、重複不可の実キーを設定した状態で、
同一レコードのカラム移動時に重複エラーは発生しません。
重複不可のチェックは、レコードを格納する直前にエラーを
発生します。これは、パフォーマンスの劣化を考慮し、
MS-SQLへの余計な重複データのチェックを抑止しているためです。
※仮想キーは、重複チェックされないので注意!!
パフォーマンスの劣化がどの位あるか、私は試していません。
パフォーマンスよりもPervasiveと同等の動作を優先する場合は、
[設定][データベース][MSSQL][特性][データベース情報]に
[CHECK_KEY=Y]を設定します。
------------------------------------------------------
・私の場合は、パフォーマンスの劣化は避けたかったので、
キー項目が変更になったら重複チェックする子タスクを作成して
対応していました。
該当はマスタ保守のPGだけでしたので、それほどでも
なかったです。
------------------------------------------------------
<補足:SQL系は、トランザクション設定が必須!!>
本題とは関係ありませんが、Pervasiveではあまり意識しない
トランザクション設定が、MS-SQL等のSQL系では必須となります。
Pervasiveと大きく違う点として、物理トランザクション開始から
終了までは、ロックするレコードが蓄積されますので注意が必要です。
※トランザクションとロックの設定は、同時に行います。
トランザクション[なし]ならロック[なし]に設定。
トランザクション[なし以外]ならロック[なし以外]に設定。
マスタ保守など、限られた人しか行わない場合は良いですが、
1伝票:N明細等の入力系ではロック時間が長くなってしまうので、
ワークテーブルを使用して、一番最後にバッチタスクで、
ワークから実データに書き込みするなどした方が良いです。
・以前ダウンロードした[Tutorial_SQL.PDF]より抜粋
SQL系のデフォルトでは、重複不可の実キーを設定した状態で、
同一レコードのカラム移動時に重複エラーは発生しません。
重複不可のチェックは、レコードを格納する直前にエラーを
発生します。これは、パフォーマンスの劣化を考慮し、
MS-SQLへの余計な重複データのチェックを抑止しているためです。
※仮想キーは、重複チェックされないので注意!!
パフォーマンスの劣化がどの位あるか、私は試していません。
パフォーマンスよりもPervasiveと同等の動作を優先する場合は、
[設定][データベース][MSSQL][特性][データベース情報]に
[CHECK_KEY=Y]を設定します。
------------------------------------------------------
・私の場合は、パフォーマンスの劣化は避けたかったので、
キー項目が変更になったら重複チェックする子タスクを作成して
対応していました。
該当はマスタ保守のPGだけでしたので、それほどでも
なかったです。
------------------------------------------------------
<補足:SQL系は、トランザクション設定が必須!!>
本題とは関係ありませんが、Pervasiveではあまり意識しない
トランザクション設定が、MS-SQL等のSQL系では必須となります。
Pervasiveと大きく違う点として、物理トランザクション開始から
終了までは、ロックするレコードが蓄積されますので注意が必要です。
※トランザクションとロックの設定は、同時に行います。
トランザクション[なし]ならロック[なし]に設定。
トランザクション[なし以外]ならロック[なし以外]に設定。
マスタ保守など、限られた人しか行わない場合は良いですが、
1伝票:N明細等の入力系ではロック時間が長くなってしまうので、
ワークテーブルを使用して、一番最後にバッチタスクで、
ワークから実データに書き込みするなどした方が良いです。
投票数:0
平均点:0.00
nkmt
投稿数: 1668

自己レスです。
心配になって、2画面開いて同じデータをAPGで開いてみました。
同じレコードに編集かけようとしたら、ちゃんとレコードロックはかかってくれました。
心配になって、2画面開いて同じデータをAPGで開いてみました。
同じレコードに編集かけようとしたら、ちゃんとレコードロックはかかってくれました。
投票数:0
平均点:0.00
nkmt
投稿数: 1668

こんにちは。
今までPervasiveばかりやってきました。
MS-SQLについて、またまたどなたか教えて下さい。m(__)m
環境は、MAGIC 9.4J SP6b、MS-SQL2005です。
ゲートウェイは、MGms7.dllです。(更新日=2006/10/27)
MS-SQLのデータをモデルリポジトリから、APGで開いて、新規にレコードを1件追加しようとして、わざとインデックス重複エラーにひっかかる値を入力して、次項目に進ませました。
Pervasiveなら、すぐに「インデックスが重複しています」という
エラーメッセージが出るのに、MS-SQLのデータだと、そのメッセージが出ません。
MS-SQLのデータの場合、カーソルを別レコードに移そうとした時にようやく「インデックス重複」のエラーメッセージが表示されます。
これが当たり前の動きなのであれば、入力プログラムを作成した場合、リンクQで重複に当たらないか検査しないといけないのか心配です。
今までPervasiveばかりやってきました。
MS-SQLについて、またまたどなたか教えて下さい。m(__)m
環境は、MAGIC 9.4J SP6b、MS-SQL2005です。
ゲートウェイは、MGms7.dllです。(更新日=2006/10/27)
MS-SQLのデータをモデルリポジトリから、APGで開いて、新規にレコードを1件追加しようとして、わざとインデックス重複エラーにひっかかる値を入力して、次項目に進ませました。
Pervasiveなら、すぐに「インデックスが重複しています」という
エラーメッセージが出るのに、MS-SQLのデータだと、そのメッセージが出ません。
MS-SQLのデータの場合、カーソルを別レコードに移そうとした時にようやく「インデックス重複」のエラーメッセージが表示されます。
これが当たり前の動きなのであれば、入力プログラムを作成した場合、リンクQで重複に当たらないか検査しないといけないのか心配です。
投票数:1
平均点:10.00