Sql-Server
確定 ANSI_DEFAULTS 設置為 ON 還是 OFF?
如何確定我的伺服器上是否啟用了 ANSI_DEFAULTS。我的伺服器正在使用 IMPLICIT 事務和一種可以根據 ANSI_DEFAULTS 設置影響它的方式。
如何確定 ANSI_DEFAULTS 的狀態?
ANSI_DEFAULTS
並不是一個真正獨特的選項,而是其他幾個基於會話的選項的邏輯分組:
- IMPLICIT_TRANSACTIONS
- CURSOR_CLOSE_ON_COMMIT
- ANSI_WARNINGS
- ANSI_PADDING
- ANSI_NULLS
- QUOTED_IDENTIFIER
- ANSI_NULL_DFLT_ON
您可以使用@@OPTIONS配置函式來獲取目前會話設置的位遮罩值,其值在配置使用者選項伺服器配置選項MSDN 頁面上進行了說明。
將這些元素放在一起可以獲得以下查詢,該查詢確定“ansi_defaults”選項組的目前會話設置:
SELECT @@OPTIONS AS [user_options], CASE WHEN @@OPTIONS & 2 = 2 THEN 'ON' ELSE 'OFF' END AS [implicit_transactions], CASE WHEN @@OPTIONS & 4 = 4 THEN 'ON' ELSE 'OFF' END AS [cursor_close_on_commit], CASE WHEN @@OPTIONS & 8 = 8 THEN 'ON' ELSE 'OFF' END AS [ansi_warnings], CASE WHEN @@OPTIONS & 16 = 16 THEN 'ON' ELSE 'OFF' END AS [ansi_padding], CASE WHEN @@OPTIONS & 32 = 32 THEN 'ON' ELSE 'OFF' END AS [ansi_nulls], CASE WHEN @@OPTIONS & 256 = 256 THEN 'ON' ELSE 'OFF' END AS [quoted_identifier], CASE WHEN @@OPTIONS & 1024 = 1024 THEN 'ON' ELSE 'OFF' END AS [ansi_null_dflt_on], -- all above options combined CASE WHEN @@OPTIONS & 1342 = 1342 THEN 'ON' ELSE 'OFF' END AS [ansi_defaults]
當所有基本選項都設置為 時
ON
,ANSI_DEFAULTS
將顯示為ON
。如果這些選項中的任何OFF
一個是,那麼ANSI_DEFAULTS
也將是OFF
。您可以通過以下測試看到此行為:SET ANSI_DEFAULTS ON; DBCC USEROPTIONS; -- ansi_defaults is SET SET ANSI_NULLS OFF; DBCC USEROPTIONS; -- ansi_nulls AND ansi_defaults are missing SET ANSI_NULLS ON; DBCC USEROPTIONS; -- ansi_nulls AND ansi_defaults are back
設置
ANSI_DEFAULTS
為ON
會將所有這些選項設置為ON
。同樣,設置ANSI_DEFAULTS
為OFF
會將所有這些選項設置為OFF
。
您將需要使用DBCC USER Options來查找..DBCC userOptions 僅顯示設置的值。如果您在此處找不到任何設置,則表示未設置
SET ANSI_DEFAULTS ON; GO -- Display the current settings. DBCC USEROPTIONS; GO -- SET ANSI_DEFAULTS OFF. SET ANSI_DEFAULTS OFF; GO
- -輸出:
textsize 2147483647 language us_english dateformat mdy datefirst 7 lock_timeout -1 quoted_identifier SET arithabort SET ansi_null_dflt_on SET ansi_defaults SET ansi_warnings SET ansi_padding SET ansi_nulls SET concat_null_yields_null SET cursor_close_on_commit SET implicit_transactions SET isolation level read committed