Sql-Server

ANSI_NULLS 和 QUOTED_IDENTIFIERS 不匹配

  • January 19, 2018

當我導出整個儲存過程/函式列表時,我注意到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_nullsuses_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。

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