0

だから私は、次のようなコードを持つ他の誰かが書いたprocを持っています:

if 1 = 0
begin
    select 
        cast(null as int) as case_id,
        cast(null as int) as review_id, 
end
      --then a real select statement happens that matches the same pattern.

現在、HP exstream は、ストアド プロシージャを実行するときに、決して呼び出してはならないにもかかわらず、どういうわけか最上位の select ステートメントを読み取っています。この非表示のクエリに空の列を追加せずに実際の結果クエリに列を追加すると、機能しません (HP exstream では、SQL サーバーでは、proc は期待どおりに実行されます)。

誰でもこれがどのように機能するかについて何か考えがありますか? HP Exstream は、この非実行コードをどのように読み取るのでしょうか?

4

1 に答える 1

0

これがどのコードベースで書かれているかはわかりませんが、Dialogue スクリプトにあると思います。exstream エンジンは C++ に基づいているため、最初の質問は IF ステートメントの構文に関するものです。

C の IF 1 = 0 は IF 1 == 0 と同じではありません。最初のものは、値 1 のインスタンスを値 0 のインスタンスに変更することに成功したかどうかに基づいて、ステートメントの真偽を判断します。したがって、それは常に真になります。後者は実際には 2 つの値を比較しますが、これは明らかに常に false です。

状況について詳しく知らなくても、最初にそれを調べます。

于 2015-09-30T20:44:19.183 に答える