Sql-Server-2019

是什麼導致 BETWEEN 被 <= 和 >= 替換?

  • June 26, 2020

我們的 SQL Server 2019 數據庫有一個 Visual Studio 解決方案,它儲存在一個 git 儲存庫中。一個表有幾個使用 BETWEEN 運算符的檢查約束,如下所示。

CONSTRAINT chk_FileTbl_MonthlyDate CHECK (MonthlyDate BETWEEN 1 AND 31)

當我使用 Redgate SQL Compare 14 將 repo 與數據庫進行比較時,它顯示了使用小於和大於運算符重新格式化的約束,如下所示。

CONSTRAINT chk_FileTbl_MonthlyDate CHECK (MonthlyDate &gt;= 1 AND MonthlyDate &lt;= 31)

我認為這是 Redgate 軟體中的錯誤/功能,並送出了我正在等待回复的票證。但是,我的同事隨後使用了 Visual Studio 2019 中的比較工具,它做了同樣的事情。如果我們查看定義表的文件,它使用 BETWEEN,但兩個比較工具都顯示並部署了一個具有小於/大於格式的更改腳本。

是什麼導致了這種行為?我們最近搬到了 SQL Server 2019,它是某種內置優化嗎?

如果您編寫查詢並生成執行計劃,您會看到它也轉換BETWEEN為一對&gt;=&lt;=謂詞。這些意思是一樣的。Redgate 只是向您顯示創建約束時 SQL Server儲存的內容,而不是您鍵入的內容。它與 SQL Server 2019 無關。

也就是說,我更喜歡兩個謂詞模式,並在此處此處BETWEEN討論為什麼對日期範圍不利。我的意見是避免異常,特別是當它只是方便的速記/語法糖時,尤其是當它與 SQL Server 內部儲存它的方式相矛盾時。換句話說,如果您不喜歡該腳本產生與您的程式碼不同的結果,請更改您的程式碼並接受.&gt;= AND &lt;=

引用自:https://dba.stackexchange.com/questions/269952