ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

MS-SQL、「インデックスが重複しています」の動きについて

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007-5-28 16:19
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で重複に当たらないか検査しないといけないのか心配です。
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007-5-28 16:34
nkmt  長老   投稿数: 1668
自己レスです。
心配になって、2画面開いて同じデータをAPGで開いてみました。
同じレコードに編集かけようとしたら、ちゃんとレコードロックはかかってくれました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2007-5-28 18:57 | 最終変更
atushi  半人前 居住地: 長野県  投稿数: 30
nkmt様、こんにちは

・以前ダウンロードした[Tutorial_SQL.PDF]より抜粋

SQL系のデフォルトでは、重複不可の実キーを設定した状態で、
同一レコードのカラム移動時に重複エラーは発生しません。
重複不可のチェックは、レコードを格納する直前にエラーを
発生します。これは、パフォーマンスの劣化を考慮し、
MS-SQLへの余計な重複データのチェックを抑止しているためです。
※仮想キーは、重複チェックされないので注意!!
 パフォーマンスの劣化がどの位あるか、私は試していません。

パフォーマンスよりもPervasiveと同等の動作を優先する場合は、
[設定][データベース][MSSQL][特性][データベース情報]に
[CHECK_KEY=Y]を設定します。

------------------------------------------------------
・私の場合は、パフォーマンスの劣化は避けたかったので、
キー項目が変更になったら重複チェックする子タスクを作成して
対応していました。
該当はマスタ保守のPGだけでしたので、それほどでも
なかったです。
------------------------------------------------------

<補足:SQL系は、トランザクション設定が必須!!>
本題とは関係ありませんが、Pervasiveではあまり意識しない
トランザクション設定が、MS-SQL等のSQL系では必須となります。
Pervasiveと大きく違う点として、物理トランザクション開始から
終了までは、ロックするレコードが蓄積されますので注意が必要です。
※トランザクションとロックの設定は、同時に行います。
 トランザクション[なし]ならロック[なし]に設定。
 トランザクション[なし以外]ならロック[なし以外]に設定。

マスタ保守など、限られた人しか行わない場合は良いですが、
1伝票:N明細等の入力系ではロック時間が長くなってしまうので、
ワークテーブルを使用して、一番最後にバッチタスクで、
ワークから実データに書き込みするなどした方が良いです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2007-5-28 23:32
nkmt  長老   投稿数: 1668
atushi様、こんばんは。
前回に引き続き今回も有難うございました。

[設定][データベース][MSSQL][特性][データベース情報]に
[CHECK_KEY=Y]を設定した所、Pervasiveの時と同様の
インデックス重複チェックが出来る事を確認致しました。
とりあえずこの方式でテストを行ってみたいと思っております。
他のご説明も大変参考になりました。
投票数:4 平均点:10.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約