日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

在SQLSERVER中,決定當(dāng)前會(huì)話的SET配置

系統(tǒng) 2229 0

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

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

?

問(wèn)題?

對(duì)于每個(gè)連接到SQLSERVER上的會(huì)話(Session),用戶能夠設(shè)置SET選項(xiàng)來(lái)影響查詢的結(jié)果和SQLSERVER潛在的行為,有些選項(xiàng)能通過(guò)GUI來(lái)設(shè)置,有些需要

通過(guò)SET 命令來(lái)設(shè)置,使用GUI非常方便知道某個(gè)設(shè)置開(kāi)啟與否,但是怎樣獲取當(dāng)前會(huì)話的所有選項(xiàng)設(shè)置呢?

?

解決方案

SQLSERVER 提供許多內(nèi)建的元數(shù)據(jù)函數(shù),其中一個(gè)是@@OPTIONS,能獲取當(dāng)前會(huì)話(session)的當(dāng)前值。每個(gè)成功的連接都會(huì)有一個(gè)默認(rèn)的值,其值也能

被其它線程覆寫。

下面這張表列出每個(gè)配置選項(xiàng)對(duì)應(yīng)的值,及其詳細(xì)的描述(摘錄自SQLSERVER 2005幫助文檔)

?

配置

說(shuō)明

1

DISABLE_DEF_CNST_CHK

控制臨時(shí)或延遲約束檢查。

2

IMPLICIT_TRANSACTIONS

對(duì)于 DBLIB 網(wǎng)絡(luò)庫(kù)連接,控制執(zhí)行語(yǔ)句時(shí)是否隱式啟動(dòng)事務(wù)。

IMPLICIT_TRANSACTIONS 設(shè)置對(duì) ODBC 或 OLEDB 連接沒(méi)有影響。

4

CURSOR_CLOSE_ON_COMMIT

控制執(zhí)行提交操作后游標(biāo)的行為。

8

ANSI_WARNINGS

控制聚合警告中的截?cái)嗪?NULL。

16

ANSI_PADDING

控制固定長(zhǎng)度變量的填充。

32

ANSI_NULLS

使用相等運(yùn)算符時(shí)控制 NULL 處理。

64

ARITHABORT

在查詢執(zhí)行過(guò)程中出現(xiàn)溢出或被零除錯(cuò)誤時(shí)終止查詢。

128

ARITHIGNORE

在查詢過(guò)程中出現(xiàn)溢出或被零除錯(cuò)誤時(shí)返回 NULL。

256

QUOTED_IDENTIFIER

對(duì)表達(dá)式進(jìn)行求值時(shí)區(qū)別單引號(hào)和雙引號(hào)。

512

NOCOUNT

關(guān)閉執(zhí)行每個(gè)語(yǔ)句后返回的報(bào)告受影響的行數(shù)的消息。

1024

ANSI_NULL_DFLT_ON

將會(huì)話的行為更改為使用 ANSI 兼容的空性。未顯式定義為空性的新列允許使用空值。

2048

ANSI_NULL_DFLT_OFF

將會(huì)話的行為更改為不使用 ANSI 兼容的空性。未顯式定義為空性的新列不允許使用空值。

4096

CONCAT_NULL_YIELDS_NULL

將 NULL 值與字符串串聯(lián)時(shí)返回 NULL。

8192

NUMERIC_ROUNDABORT

表達(dá)式中出現(xiàn)精度降低時(shí)生成錯(cuò)誤。

16384

XACT_ABORT

如果 Transact-SQL 語(yǔ)句產(chǎn)生運(yùn)行時(shí)錯(cuò)誤,則回滾事務(wù)。

?

?

在前一章 Reproducing Query Execution Plan Performance Problems 中談到了SET 選擇是如何影響到查詢結(jié)果和性能的,所以SET 命令對(duì)于當(dāng)前會(huì)話的設(shè)置非常

有用,為了得到當(dāng)前會(huì)話的配置值,可以運(yùn)行如下的SELECT語(yǔ)句

        
          SELECT
        
         @@OPTIONS
      
    
      該語(yǔ)句會(huì)返回一整形值代表上表格中所有選項(xiàng)值的
      
      。為了更好的理解這整形值的含義,可運(yùn)行接下來(lái)的按位與操作,看看哪個(gè)SET選項(xiàng)被開(kāi)啟:
    
  
        
          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
        
        ' 
      

?

上面代碼執(zhí)行的結(jié)果為:

?

QQ截圖未命名

?

說(shuō)明:@@OPTIONS返回5496,接下來(lái)每行的是當(dāng)前會(huì)話(Session)開(kāi)啟的配置選項(xiàng)。

當(dāng)我們?cè)O(shè)置SET NOCOUNT ON,其比特值(bit value)是512,來(lái)看看@@OPTIONS值的變化,現(xiàn)在的值為5496+512=6008.運(yùn)行如下的代碼:

?

        
          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
        
        ' 
      


上面代碼執(zhí)行的結(jié)果為:

QQ截圖未命名

?

看看當(dāng)SET NOCOUNT ON ,SET QUOTED_IDENTIFIFER OFF的結(jié)果

        
          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
        
        ' 
      


上面代碼運(yùn)行的結(jié)果為:

QQ截圖未命名

已經(jīng)排除QUOTED_IDENTIFIER選項(xiàng)了。

?

總結(jié)

這個(gè)簡(jiǎn)單的元數(shù)據(jù)函數(shù)(@@OPTIONS)能夠給你非常多的有關(guān)當(dāng)前會(huì)話(Session)配置信息,通過(guò)該元數(shù)據(jù)函數(shù),你能知曉用戶會(huì)話的配置設(shè)置,

也可以確保代碼運(yùn)行符合設(shè)想而開(kāi)啟或關(guān)閉某個(gè)選項(xiàng)。

在SQLSERVER中,決定當(dāng)前會(huì)話的SET配置


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 寻乌县| 辉南县| 麦盖提县| 姜堰市| 乐安县| 宜宾县| 通城县| 昌吉市| 南木林县| 黔西县| 巴中市| 绥化市| 湘西| 青阳县| 紫云| 阳新县| 出国| 卢湾区| 堆龙德庆县| 丽江市| 和林格尔县| 礼泉县| 浪卡子县| 德化县| 梁平县| 同心县| 通化市| 泰兴市| 靖宇县| 芮城县| 哈密市| 九龙城区| 视频| 专栏| 桐梓县| 垫江县| 辽中县| 名山县| 富阳市| 延长县| 乌兰浩特市|