これは適切ではないが、本当にこれは「方法」ではなく「理由」です。それが適切であるかどうかわからないが、より良い場所を尋ねることを知らないし、私が探しているものを得るためにどのようにフレーズをGoogleに考えることができない。IF節のSQL評価
IF 'hell' = 'freezing over'
BEGIN
SELECT log(0)
END
この声明を見てください。 IF句が真となる世界はありません。私がそれを実行しようとすると、私はSQLがIF節を越えてジャンプし、最後に移動することを期待しています。代わりに私は得る:
An invalid floating point operation occurred.
これは奇妙です。だから私はそれがSQLがそれをする方法であると思います。例外...
IF 'hell' = 'freezing over'
BEGIN
SELECT 1/0
END
エラーはありません。 IF句のステートメントはエラーを生成するはずです。なぜこれが起こっていないのか誰も説明できますか?
これは、EXP節(SUM(LOG()))がif節内のデータを蓄積するために使用される大量のSQL計算をデバッグする際に発生しました。それをやめるためにコードを変更することはできますが、IF句内で何かが評価されていないのはなぜですか。
乾杯。
EDIT:追加の娯楽。キャッチしてみる? Pffft
IF 1=2
BEGIN
BEGIN TRY
SELECT SQRT(-1)
END TRY
BEGIN CATCH
END CATCH
END
非数学:
IF 1=2
BEGIN
SELECT SUBSTRING('hello',-1,-1)
END
ANSIの警告は違いはありませんでしたが、それは私がとても感謝する必要があると思うリンクです:) –
あなたの歓迎。 ANSI_WARNINGS私は、 "set ansi_warnings off"がいつでも発行された場合、ゼロによる除算エラーが表示されないことを意味しました。コンパイラは、コンパイルされたクエリが実行されるときにANSI_WARNINGSフラグの状態を事前に知ることができないため、コンパイル時にゼロ除算例外を発生させる折り畳まれた式は無視しなければなりません。 (ansi_warningsが常にオフになることが保証されていれば、1/0はNULLになります) –