会社のポリシーに従って、永続的なテーブルを作成し、一連の挿入と更新を実行してすべてのデータを取得するレポート用の SQL クエリを作成しました。私のマシンの SQL Server Management Studio と Crystal Reports 2008 では正常に動作します。ただし、SAP BusinessObjects Central Management Console を使用してサーバー上で実行するようにスケジュールすると、「関連付けられたステートメントが準備されていません」というエラーで失敗します。この永続テーブルを一時テーブルに変更すると、クエリが機能することがわかりました。これはなぜでしょうか?
4 に答える
一部の調査では、実際のエラーではなく、このエラーが送信される場合があることが示されています。それを報告している他の人々は、外部キーと(私も推測しますが)重複キーエラーについて話しています。
私がチェックすること:
- 永続テーブルに、違反する可能性のある一意の制約がありますか? または、外部キー制約はありますか?
- テーブルの作成後にテーブルにインデックスを作成していますか?
- この永続テーブルに対してビューを作成していますか?
- ジョブが実行される前にテーブルが既に存在する場合はどうなりますか?
- ジョブが失敗した場合、テーブルはどうなりますか?
- 追加の一時テーブルまたは永続テーブルを必要とする可能性のある中間ステップ (ストアド プロシージャ内など) はありますか?
ETA: また、永続テーブルが属しているスキーマを確認してください: 通常は "dbo" で作成されますか? それを明示的に指定していますか?アクセス許可の問題が発生する可能性はありますか?
コードを見ていないのは推測ですが、レポートを実行するたびに永続的なテーブルを作成しているので、ある時点でテーブルを削除する必要があると思いますか? (または、時間の経過とともに多くのテーブルが構築されます。)
考慮すべきいくつかの角度を提案します。
1) 同時実行/ロックの問題などを懸念している場合は、テーブルにプレフィックスを付けて (おそらくセッション ID などで)、各レポートの実行でそれ自体専用のテーブルが作成されるようにします。
2) 最後にテーブルを削除する場合は、代わりにロジックを調整してテーブルをそのままにしておきます。操作を (再) 開始するとドロップするコードを記述します。レポートがテーブルにしがみついていて、時期尚早に破棄している可能性があります。
これは多くの場合、一般的なエラーです。実行予定のアカウントとしてサーバー上で実行できますか? 許可エラーまたは制約の問題である可能性が最も高いです。