- - PR -
SQLServer2000のBCPユーティリティのストアド内IF文が無効になる
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-05-16 15:22
ストアド内にIF文が2つ以上あると失敗するようです。
うーん><;; | ||||
|
投稿日時: 2005-05-16 17:12
ストアド内の処理順序を適当に変えると動くこともあるようです(T−T
該当処理のロジックをいじってみます。。。 | ||||
|
投稿日時: 2005-05-16 17:52
処理ロジックを適当に変えたらできました。
WHERE句を先に作成して変数に退避するようにしました。 失敗するケースについては良くわかりませんが、バグかと思っています。 お騒がせして、申し訳ありませんでした。 | ||||
|
投稿日時: 2005-05-17 08:39
既に解決されているようですが、とりあえずこちらでも試してみました。
最初に確認したいのですが、現象としては 「IF文内のコードが必ず実行されてしまう」ではなく 「IF分内のコードがエラーであると表示されてしまう」ですか? もしそうだとすると、IFブロックの中の文は実際に実行されるかされないかに 関わらず構文チェックが行われるようですので、今回の問題は単に構文エラーであると いうことになると思います。 そういう前提でお聞きしますが、noderaさんが書かれているように 「"'"」(ダブル シングル ダブル)→「''''」(シングル×4) という置き換えをしても本当にエラーが出ますか? こちらで試した限りでは、エラー無く処理されました。 で、全然関係ないのですが、最初のIFブロックと2番目のIFブロックで 全く同じ WHERE句を生成しているほうが気になったりして(^^; | ||||
|
投稿日時: 2005-05-17 09:50
現象としては、
IF文内のコードが必ず実行されてしまうため、 (WHERE句が2つになり)IF分内のコードがエラーであると表示されてしまうです。 「"'"」(ダブル シングル ダブル)→「''''」(シングル×4) の変更をしてもエラーはでてしまいました。 環境の違いかもしれません。 | ||||
|
投稿日時: 2005-05-17 10:04
すいません、現象についてもう少し細かく書くと、
IF文内のコードが必ず実行されてしまうため、 (WHERE句が2つになり)(SQL文実行時に)IF分内のコードがエラーであると表示されてしまうです。 自分でもいろいろ試したのですが、 同じ制御文の並びでも変数内容等が違うとうまくいくように思えます。 このストアド(とこの環境?)に限っているようです>< | ||||
|
投稿日時: 2005-05-17 12:10
プロファイラ等で調べてみたのですが、どうやら件のコマンドを実行すると
次のような流れで処理が行われるようです。 1.SET FMTONLY ON 2.EXEC TELSAS_BASE.dbo.エラーログ詳細情報エクスポート @DBNAME_M='TELSAS200504',@DBNAME_B='TELSAS_BASE',@TERMNO='ffff',@TANSHU='30',@KAISHU='03' を実行 3.SET FMTONLY OFF 4.EXEC TELSAS_BASE.dbo.エラーログ詳細情報エクスポート @DBNAME_M='TELSAS200504',@DBNAME_B='TELSAS_BASE',@TERMNO='ffff',@TANSHU='30',@KAISHU='03' を実行 2 のプロシージャ実行で、出力するデータのフォーマットを取得し、 4 のプロシージャ実行で、実際のデータ出力が行われています。 今回エラーが発生しているのが 2 のプロシージャ実行時で、 あおいさんが書かれている通り、IF の条件が一切評価されずに全て実行されているようです。 それで、いろいろ回避策を探してみたのですが、以下のようにしてみるとうまくいくような気がします…。
| ||||
|
投稿日時: 2005-05-17 13:10
回避策までどうもありがとうございます。
自分もプロファイラで見てみましたが、SQL文の実行が成功しないとSQL文が表示されないのでよくわかりませんでした。 回避策で成功できるかやってみます。。。 | ||||
