Sql-Server
ANSI_NULLS 和 QUOTED_IDENTIFIERS 不匹配
當我導出整個儲存過程/函式列表時,我注意到
ANSI_NULLS
/QUOTED_IDENTIFIERS
設置之間存在不匹配。有些人開著,有些人關著。我沒有為儲存過程或函式顯式設置此設置,那麼 SQL 如何確定預設情況下是否為這些設置定義打開或關閉?
那麼 SQL 是如何決定預設為 ansi null 定義 on 還是 off 的呢?
BOL 引號- 對於儲存過程,SQL Server 使用儲存過程
SET ANSI_NULLS
初始創建時的設置值。每當隨後執行儲存過程時, 的設置SET ANSI_NULLS
都會恢復到原來使用的值並生效。在儲存過程中呼叫時,SET ANSI_NULLS
不會更改 的設置。您可以使用
sys.sql_modules
來檢查儲存過程或函式的使用uses_ansi_nulls
和uses_quoted_identifier
設置 1 (ON) 或 0 (OFF)SELECT OBJECT_NAME([object_id]) as ObjectName, uses_ansi_nulls, uses_quoted_identifier FROM sys.sql_modules --WHERE OBJECT_NAME([object_id]) = 'any_sp/function_name_your_Want_to_Check' ORDER BY object_id
兩者都
ANSI_NULLS
應該QUOTED_IDENTIFIERS
打開,這樣您就不會看到任何意外的驚喜。此外,在較新版本的 SQL Server 中,這兩個設置預設為 ON。