問題?
對于每個連接配接到SQLSERVER上的會話(Session),使用者能夠設定SET選項來影響查詢的結果和SQLSERVER潛在的行為,有些選項能通過GUI來設定,有些需要
通過SET 指令來設定,使用GUI非常友善知道某個設定開啟與否,但是怎樣擷取目前會話的所有選項設定呢?
解決方案
SQLSERVER 提供許多内建的中繼資料函數,其中一個是@@OPTIONS,能擷取目前會話(session)的目前值。每個成功的連接配接都會有一個預設的值,其值也能
被其它線程覆寫。
下面這張表列出每個配置選項對應的值,及其詳細的描述(摘錄自SQLSERVER 2005幫助文檔)
值
配置
說明
1
DISABLE_DEF_CNST_CHK
控制臨時或延遲限制檢查。
2
IMPLICIT_TRANSACTIONS
對于 DBLIB 網絡庫連接配接,控制執行語句時是否隐式啟動事務。
IMPLICIT_TRANSACTIONS 設定對 ODBC 或 OLEDB 連接配接沒有影響。
4
CURSOR_CLOSE_ON_COMMIT
控制執行送出操作後遊标的行為。
8
ANSI_WARNINGS
控制聚合警告中的截斷和 NULL。
16
ANSI_PADDING
控制固定長度變量的填充。
32
ANSI_NULLS
使用相等運算符時控制 NULL 處理。
64
ARITHABORT
在查詢執行過程中出現溢出或被零除錯誤時終止查詢。
128
ARITHIGNORE
在查詢過程中出現溢出或被零除錯誤時傳回 NULL。
256
QUOTED_IDENTIFIER
對表達式進行求值時差別單引号和雙引号。
512
NOCOUNT
關閉執行每個語句後傳回的報告受影響的行數的消息。
1024
ANSI_NULL_DFLT_ON
将會話的行為更改為使用 ANSI 相容的空性。未顯式定義為空性的新列允許使用空值。
2048
ANSI_NULL_DFLT_OFF
将會話的行為更改為不使用 ANSI 相容的空性。未顯式定義為空性的新列不允許使用空值。
4096
CONCAT_NULL_YIELDS_NULL
将 NULL 值與字元串串聯時傳回 NULL。
8192
NUMERIC_ROUNDABORT
表達式中出現精度降低時生成錯誤。
16384
XACT_ABORT
如果 Transact-SQL 語句産生運作時錯誤,則復原事務。
有用,為了得到目前會話的配置值,可以運作如下的SELECT語句
上面代碼執行的結果為:

說明:@@OPTIONS傳回5496,接下來每行的是目前會話(Session)開啟的配置選項。
當我們設定SET NOCOUNT ON,其比特值(bit value)是512,來看看@@OPTIONS值的變化,現在的值為5496+512=6008.運作如下的代碼:
看看當SET NOCOUNT ON ,SET QUOTED_IDENTIFIFER OFF的結果
上面代碼運作的結果為:
已經排除QUOTED_IDENTIFIER選項了。
總結
這個簡單的中繼資料函數(@@OPTIONS)能夠給你非常多的有關目前會話(Session)配置資訊,通過該中繼資料函數,你能知曉使用者會話的配置設定,
也可以確定代碼運作符合設想而開啟或關閉某個選項。