2012-03-28 9 views
0

私はかなり長いSQL文を生成するコードをいくつか持っています。このコードは、私がデータベースクエリ関数にパラメータとして書いた書式付きクエリから書かれています。空白まで、2つのクエリはまったく同じです。実際に、生成されたSQLをコピーしてVimで:%s/\s\{2,}/ /gを適用すると、出力は元のクエリと同じになります(コメントは削除されます)。:%jに続いて:%s/\s\{2,}/ /gが適用されます。VBAの奇妙な動的SQL Heysenbug

は実際に、彼らは時間のいくつかの異なる出力を作り出します。クエリツールでこれを調べようとしたところ、VBAで生成されたSQLは期待どおりに動作しませんでした。上記の空白を削除する変換をVBA生成クエリに適用したところ、動作しました。奇妙なのは、もともと生成されたクエリ(余分な空白を含む)が突然動作し始めたことです!しかし、矛盾しています。余分な空白のバージョンが動作することを保証する決定的なパターンはありません。 (私の推測では、これはデータベースサーバの礼儀であるキャッシング現象であるかもしれません)。

とにかく、私の質問は空白に関するものです:私は空白が区切りを超えてSQLに無関係であったという印象を受けました。これは事実ではないのですか?たぶん、生成されたSQL文字列が長すぎます(> 6kb)...任意のアイデアですか?アプリの観点から、より少ない複雑なクエリを作成する

+1

変換は、上記の引用符内の連続した空白文字を削除するだろう、複雑な部分を取ると、アプリから、その後、ビューでそれを埋めるためにありますか?それはあなたが見ているような問題を引き起こすかもしれません。 –

+0

良いと思ったが、恐れてはいない:P – Xophmeister

+0

にはenquoted空白がありません...最終的に、私は、クエリを書き直すことにしました私はDBAの怒りを被らないように、私はその道を踏み出すことを望んでいません! – Xophmeister

答えて

1

ひとつのアイデアは、ちょうど

select c1,c1, ... from myview; 
+0

通常、私はだろうが、私のクエリはビューで表現するにはあまりにもダイナミックです:どちらかの問合せ:( – Xophmeister