亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

在SQLSERVER中,決定當前會話的SET配置

系統 1897 0

出處: http://www.cnblogs.com/fly_zj/archive/2010/07/07/1772818.html

原文為 Determining SET Options for a Current Session in SQL Server

?

問題?

對于每個連接到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 語句產生運行時錯誤,則回滾事務。

?

?

在前一章 Reproducing Query Execution Plan Performance Problems 中談到了SET 選擇是如何影響到查詢結果和性能的,所以SET 命令對于當前會話的設置非常

有用,為了得到當前會話的配置值,可以運行如下的SELECT語句

        
          SELECT
        
         @@OPTIONS
      
    
      該語句會返回一整形值代表上表格中所有選項值的
      
      。為了更好的理解這整形值的含義,可運行接下來的按位與操作,看看哪個SET選項被開啟:
    
  
        
          DECLARE
        
         @options 
        
          INT
        
        
          SELECT
        
         @options = @@OPTIONS




        
          PRINT
        
         @options


        
          IF
        
         ( (1 & @options) = 1 ) 
        
          PRINT
        
         '
        
          DISABLE_DEF_CNST_CHK
        
        '


        
          IF
        
         ( (2 & @options) = 2 ) 
        
          PRINT
        
         '
        
          IMPLICIT_TRANSACTIONS
        
        '


        
          IF
        
         ( (4 & @options) = 4 ) 
        
          PRINT
        
         '
        
          CURSOR_CLOSE_ON_COMMIT
        
        '


        
          IF
        
         ( (8 & @options) = 8 ) 
        
          PRINT
        
         '
        
          ANSI_WARNINGS
        
        '


        
          IF
        
         ( (16 & @options) = 16 ) 
        
          PRINT
        
         '
        
          ANSI_PADDING
        
        '


        
          IF
        
         ( (32 & @options) = 32 ) 
        
          PRINT
        
         '
        
          ANSI_NULLS
        
        '


        
          IF
        
         ( (64 & @options) = 64 ) 
        
          PRINT
        
         '
        
          ARITHABORT
        
        '


        
          IF
        
         ( (128 & @options) = 128 ) 
        
          PRINT
        
         '
        
          ARITHIGNORE
        
        '


        
          IF
        
         ( (256 & @options) = 256 ) 
        
          PRINT
        
         '
        
          QUOTED_IDENTIFIER
        
        '


        
          IF
        
         ( (512 & @options) = 512 ) 
        
          PRINT
        
         '
        
          NOCOUNT
        
        '


        
          IF
        
         ( (1024 & @options) = 1024 ) 
        
          PRINT
        
         '
        
          ANSI_NULL_DFLT_ON
        
        '


        
          IF
        
         ( (2048 & @options) = 2048 ) 
        
          PRINT
        
         '
        
          ANSI_NULL_DFLT_OFF
        
        '


        
          IF
        
         ( (4096 & @options) = 4096 ) 
        
          PRINT
        
         '
        
          CONCAT_NULL_YIELDS_NULL
        
        '


        
          IF
        
         ( (8192 & @options) = 8192 ) 
        
          PRINT
        
         '
        
          NUMERIC_ROUNDABORT
        
        '


        
          IF
        
         ( (16384 & @options) = 16384 ) 
        
          PRINT
        
         '
        
          XACT_ABORT
        
        ' 
      

?

上面代碼執行的結果為:

?

QQ截圖未命名

?

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

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

?

        
          SET
        
         NOCOUNT 
        
          ON
        
        
          DECLARE
        
         @options 
        
          INT
        
        
          SELECT
        
         @options = @@OPTIONS




        
          PRINT
        
         @options


        
          IF
        
         ( (1 & @options) = 1 ) 
        
          PRINT
        
         '
        
          DISABLE_DEF_CNST_CHK
        
        '


        
          IF
        
         ( (2 & @options) = 2 ) 
        
          PRINT
        
         '
        
          IMPLICIT_TRANSACTIONS
        
        '


        
          IF
        
         ( (4 & @options) = 4 ) 
        
          PRINT
        
         '
        
          CURSOR_CLOSE_ON_COMMIT
        
        '


        
          IF
        
         ( (8 & @options) = 8 ) 
        
          PRINT
        
         '
        
          ANSI_WARNINGS
        
        '


        
          IF
        
         ( (16 & @options) = 16 ) 
        
          PRINT
        
         '
        
          ANSI_PADDING
        
        '


        
          IF
        
         ( (32 & @options) = 32 ) 
        
          PRINT
        
         '
        
          ANSI_NULLS
        
        '


        
          IF
        
         ( (64 & @options) = 64 ) 
        
          PRINT
        
         '
        
          ARITHABORT
        
        '


        
          IF
        
         ( (128 & @options) = 128 ) 
        
          PRINT
        
         '
        
          ARITHIGNORE
        
        '


        
          IF
        
         ( (256 & @options) = 256 ) 
        
          PRINT
        
         '
        
          QUOTED_IDENTIFIER
        
        '


        
          IF
        
         ( (512 & @options) = 512 ) 
        
          PRINT
        
         '
        
          NOCOUNT
        
        '


        
          IF
        
         ( (1024 & @options) = 1024 ) 
        
          PRINT
        
         '
        
          ANSI_NULL_DFLT_ON
        
        '


        
          IF
        
         ( (2048 & @options) = 2048 ) 
        
          PRINT
        
         '
        
          ANSI_NULL_DFLT_OFF
        
        '


        
          IF
        
         ( (4096 & @options) = 4096 ) 
        
          PRINT
        
         '
        
          CONCAT_NULL_YIELDS_NULL
        
        '


        
          IF
        
         ( (8192 & @options) = 8192 ) 
        
          PRINT
        
         '
        
          NUMERIC_ROUNDABORT
        
        '


        
          IF
        
         ( (16384 & @options) = 16384 ) 
        
          PRINT
        
         '
        
          XACT_ABORT
        
        ' 
      


上面代碼執行的結果為:

QQ截圖未命名

?

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

        
          SET
        
         NOCOUNT 
        
          ON
        
        
          SET
        
         QUOTED_IDENTIFIER 
        
          OFF
        
        
          DECLARE
        
         @options 
        
          INT
        
        
          SELECT
        
         @options = @@OPTIONS




        
          PRINT
        
         @options


        
          IF
        
         ( (1 & @options) = 1 ) 
        
          PRINT
        
         '
        
          DISABLE_DEF_CNST_CHK
        
        '


        
          IF
        
         ( (2 & @options) = 2 ) 
        
          PRINT
        
         '
        
          IMPLICIT_TRANSACTIONS
        
        '


        
          IF
        
         ( (4 & @options) = 4 ) 
        
          PRINT
        
         '
        
          CURSOR_CLOSE_ON_COMMIT
        
        '


        
          IF
        
         ( (8 & @options) = 8 ) 
        
          PRINT
        
         '
        
          ANSI_WARNINGS
        
        '


        
          IF
        
         ( (16 & @options) = 16 ) 
        
          PRINT
        
         '
        
          ANSI_PADDING
        
        '


        
          IF
        
         ( (32 & @options) = 32 ) 
        
          PRINT
        
         '
        
          ANSI_NULLS
        
        '


        
          IF
        
         ( (64 & @options) = 64 ) 
        
          PRINT
        
         '
        
          ARITHABORT
        
        '


        
          IF
        
         ( (128 & @options) = 128 ) 
        
          PRINT
        
         '
        
          ARITHIGNORE
        
        '


        
          IF
        
         ( (256 & @options) = 256 ) 
        
          PRINT
        
         '
        
          QUOTED_IDENTIFIER
        
        '


        
          IF
        
         ( (512 & @options) = 512 ) 
        
          PRINT
        
         '
        
          NOCOUNT
        
        '


        
          IF
        
         ( (1024 & @options) = 1024 ) 
        
          PRINT
        
         '
        
          ANSI_NULL_DFLT_ON
        
        '


        
          IF
        
         ( (2048 & @options) = 2048 ) 
        
          PRINT
        
         '
        
          ANSI_NULL_DFLT_OFF
        
        '


        
          IF
        
         ( (4096 & @options) = 4096 ) 
        
          PRINT
        
         '
        
          CONCAT_NULL_YIELDS_NULL
        
        '


        
          IF
        
         ( (8192 & @options) = 8192 ) 
        
          PRINT
        
         '
        
          NUMERIC_ROUNDABORT
        
        '


        
          IF
        
         ( (16384 & @options) = 16384 ) 
        
          PRINT
        
         '
        
          XACT_ABORT
        
        ' 
      


上面代碼運行的結果為:

QQ截圖未命名

已經排除QUOTED_IDENTIFIER選項了。

?

總結

這個簡單的元數據函數(@@OPTIONS)能夠給你非常多的有關當前會話(Session)配置信息,通過該元數據函數,你能知曉用戶會話的配置設置,

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

在SQLSERVER中,決定當前會話的SET配置


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美综合激情 | 免费特黄级夫费生活片 | 亚洲一区二区三区四区五区 | 天天插天天操天天干 | 狠狠色狠狠色综合网 | 狠狠叉 | 国产综合精品久久久久成人影 | 99久久精品国产免看国产一区 | h视频在线观看网站 | 国产精品18久久久久网站 | 国产免费爱在线观看视频 | 亚洲成a人片在线观看www | 国产亚洲欧美在线 | 国产成在线观看免费视频成本人 | 六色视频| 性视频xxx| 成人伊人青草久久综合网 | 性短视频在线观看免费不卡流畅 | 五月天婷婷视频 | 91国内精品线免费播放 | 国产成人亚洲综合一区 | 四虎www免费人成 | 在线观看国产91 | 全部精品孕妇色视频在线 | 一本到在线观看视频不卡 | 欧美久久一区二区三区 | 嘿咻嘿咻免费区在线观看吃奶 | 老司机观看精品一区二区 | 日韩精品一区二区三区高清 | 色视在线| 99精品国产费观看视频 | 自拍 欧美 在线 综合 另类 | 顶级欧美色妇xxxxbbbb | 中文字幕免费观看视频 | 国产精品视频在线播放 | 日本黄色录象 | 午夜精品久久久久久久 | 极品女神西比尔久久精品 | 四虎精品在线观看 | 国产91免费在线观看 | 黄色网一级片 |