道歉,如果這不適合,但真的這是'爲什麼',而不是'如何'。不知道這是否合適,但不知道一個更好的地方要問,我想不出如何說出谷歌來獲得我正在尋找的東西。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子句中的語句仍然會產生錯誤。任何人都可以解釋爲什麼這不會發生?
這是在調試大量SQL計算時使用EXP(SUM(LOG()))在if子句中累積數據的過程。我可以改變代碼以阻止這種情況再次發生,但爲什麼它在未滿足的IF子句中評估某些內容。
乾杯。
編輯:額外的娛樂。試着抓? 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) –