天天看點

在SQLSERVER中,決定目前會話的SET配置(翻譯)[轉]

問題?

對于每個連接配接到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語句

 

上面代碼執行的結果為:

在SQLSERVER中,決定目前會話的SET配置(翻譯)[轉]

說明:@@OPTIONS傳回5496,接下來每行的是目前會話(Session)開啟的配置選項。

當我們設定SET NOCOUNT ON,其比特值(bit value)是512,來看看@@OPTIONS值的變化,現在的值為5496+512=6008.運作如下的代碼:

在SQLSERVER中,決定目前會話的SET配置(翻譯)[轉]

看看當SET NOCOUNT ON ,SET QUOTED_IDENTIFIFER OFF的結果

上面代碼運作的結果為:

在SQLSERVER中,決定目前會話的SET配置(翻譯)[轉]

已經排除QUOTED_IDENTIFIER選項了。

總結

這個簡單的中繼資料函數(@@OPTIONS)能夠給你非常多的有關目前會話(Session)配置資訊,通過該中繼資料函數,你能知曉使用者會話的配置設定,

也可以確定代碼運作符合設想而開啟或關閉某個選項。