zoukankan      html  css  js  c++  java
  • SQL Server选项综述

    I. 基本概念

    SQL Server中的选项根据其作用范围分为如下几类:

    • 实例选项 —— 在数据库实例范围内有效,通过 sp_configure 存储过程进行配置。
    • 数据库选项 —— 在数据库范围内有效,通过 ALTER DATABASE SET 语句进行配置。
    • 批处理选项 —— 批处理选项又称SET选项,其有效域需根据具体情况确定,它通过SET语句来修改。批处理选项在会话建立时根据用户选项或连接选项初始化。其中,用户选项在用户登录时通过实例选项中的“user options” 选项获得;连接选项通过 ODBC 或 OLE DB 连接属性获得。
    • 语句选项 —— 查询语句中通过提示关键字(如查询提示,表提示,联接提示等)设置的选项或策略。详见 提示 (Transact-SQL)

    II. 选项作用层次结构

    当某一选项在多个级别受到支持时,将按如下层次发生作用:

    1. 数据库选项替代实例选项。

    2. 批处理(SET)选项代替数据库选项。

    3. 语句选项(提示)代替批处理选项。

    III. 各类选项的配置及查看

    1. 实例选项

    1)查看实例选项

    SELECT * FROM sys.configurations ORDER BY name
    --
    sp_configure

    可用的实例选项及定义详见:http://technet.microsoft.com/zh-cn/library/ms189631(v=sql.105).aspx

    2)设置实例选项

    sp_configure 'fill factor', 100;
    GO
    RECONFIGURE;
    GO

    注意:在通过sp_configure配置实例选项后,此选项不会立即生效,除非重启服务或执行RECONFIGURE语句。

    详见:http://technet.microsoft.com/zh-cn/library/ms188787(v=sql.105).aspx

    2. 数据库选项

    1)查看数据库选项

    SELECT is_ansi_nulls_on FROM sys.databases WHERE name = 'DBName'
    --
    SELECT * FROM sys.databases WHERE name = 'DBName'

    注意:上面SQL语句中'DBName'不要加'[]',否则查询不出结果。

    数据库选项的缺省值在model数据库中定义:http://technet.microsoft.com/zh-cn/library/ms186388(v=sql.105).aspx

    可用的数据库选项及定义详见:http://technet.microsoft.com/zh-cn/library/ms190249(v=sql.105).aspx

    2)设置数据库选项

    ALTER DATABASE DBName SET RECOVERY FULL, PAGE_VERIFY CHECKSUM

    详见:http://technet.microsoft.com/zh-cn/library/bb522682(v=sql.105).aspx

    3. 批处理选项

    1)查看批处理选项

    批处理选项的具体取值由两部分因素决定,一是会话的初始值(由用户选项或连接选项决定),二是批处理语句所处的上下文及SET语句的使用情况。也就是说,如果上下文或批处理语句中都没有执行SET语句,则批处理选项的取值为会话的初始值,否则其取值由上下文及批处理中SET语句的设置值决定。关于上下文有如下情况:

    • 由用户设置的 SET 选项在会话存在期间有效。
    • 在存储过程或触发器内设置的 SET 选项在该存储过程或触发器语句块内有效。
    • 除非进行显式重置,否则来自所有更高级别的代码中的 SET 选项值在存储过程或触发器内有效。
    • 动态 SQL 批处理内由用户设置的 SET 选项仅在该批处理块内有效。
    • 除非进行重置,否则为连接设置的 SET 选项在连接到其他数据库之后有效。

    对于批处理执行时的SET选项可用如下语句查看:

    SELECT 'DISABLE_DEF_CNST_CHK', CASE WHEN (1 & @@OPTIONS) = 1 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'IMPLICIT_TRANSACTIONS', CASE WHEN (2 & @@OPTIONS) = 2 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'CURSOR_CLOSE_ON_COMMIT', CASE WHEN (4 & @@OPTIONS) = 4 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_WARNINGS', CASE WHEN (8 & @@OPTIONS) = 8 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_PADDING', CASE WHEN (16 & @@OPTIONS) = 16 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_NULLS', CASE WHEN (32 & @@OPTIONS) = 32 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ARITHABORT', CASE WHEN (64 & @@OPTIONS) = 64 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ARITHIGNORE', CASE WHEN (128 & @@OPTIONS) = 128 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'QUOTED_IDENTIFIER', CASE WHEN (256 & @@OPTIONS) = 256 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'NOCOUNT', CASE WHEN (512 & @@OPTIONS) = 512 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_NULL_DFLT_ON', CASE WHEN (1024 & @@OPTIONS) = 1024 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_NULL_DFLT_OFF', CASE WHEN (2048 & @@OPTIONS) = 2048 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'CONCAT_NULL_YIELDS_NULL', CASE WHEN (4096 & @@OPTIONS) = 4096 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'NUMERIC_ROUNDABORT', CASE WHEN (8192 & @@OPTIONS) = 8192 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'XACT_ABORT', CASE WHEN (16384 & @@OPTIONS) = 16384 THEN 'ON' ELSE 'OFF' END

    可用的SET选项及定义详见:http://technet.microsoft.com/zh-cn/library/ms190707(v=sql.105).aspx

    也可通过如下语句查看用户选项缺省值:

    DECLARE @UserOptions INT
    SELECT @UserOptions=CONVERT(INT,value_in_use) FROM sys.configurations WHERE name='user options'
    
    SELECT 'DISABLE_DEF_CNST_CHK', CASE WHEN (1 & @UserOptions) = 1 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'IMPLICIT_TRANSACTIONS', CASE WHEN (2 & @UserOptions) = 2 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'CURSOR_CLOSE_ON_COMMIT', CASE WHEN (4 & @UserOptions) = 4 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_WARNINGS', CASE WHEN (8 & @UserOptions) = 8 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_PADDING', CASE WHEN (16 & @UserOptions) = 16 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_NULLS', CASE WHEN (32 & @UserOptions) = 32 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ARITHABORT', CASE WHEN (64 & @UserOptions) = 64 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ARITHIGNORE', CASE WHEN (128 & @UserOptions) = 128 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'QUOTED_IDENTIFIER', CASE WHEN (256 & @UserOptions) = 256 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'NOCOUNT', CASE WHEN (512 & @UserOptions) = 512 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_NULL_DFLT_ON', CASE WHEN (1024 & @UserOptions) = 1024 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'ANSI_NULL_DFLT_OFF', CASE WHEN (2048 & @UserOptions) = 2048 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'CONCAT_NULL_YIELDS_NULL', CASE WHEN (4096 & @UserOptions) = 4096 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'NUMERIC_ROUNDABORT', CASE WHEN (8192 & @UserOptions) = 8192 THEN 'ON' ELSE 'OFF' END
    UNION
    SELECT 'XACT_ABORT', CASE WHEN (16384 & @UserOptions) = 16384 THEN 'ON' ELSE 'OFF' END

    可用的用户选项及定义详见:http://technet.microsoft.com/zh-cn/library/ms176031(v=sql.105).aspx

    2)设置批处理(SET)选项

    SET QUOTED_IDENTIFIER, ANSI_NULLS ON

    详见:http://technet.microsoft.com/zh-cn/library/ms190356(v=sql.105).aspx

    另外,Transact-SQL 提供 SET ANSI_DEFAULTS 语句作为设置下列 ISO 标准选项的快捷方式:

    • SET ANSI_NULLS
    • SET CURSOR_CLOSE_ON_COMMIT
    • SET ANSI_NULL_DFLT_ON
    • SET IMPLICIT_TRANSACTIONS
    • SET ANSI_PADDING
    • SET QUOTED_IDENTIFIER
    • SET ANSI_WARNINGS

    详见:http://technet.microsoft.com/zh-cn/library/ms190707(v=sql.105).aspx

    可通过如下语句设置用户选项缺省值:

    sp_configure 'user options', 5496
    GO
    RECONFIGURE
    GO 

    参考:
    http://technet.microsoft.com/zh-cn/library/ms191203(v=sql.105).aspx
    http://www.mssqltips.com/sqlservertip/1415/determining-set-options-for-a-current-session-in-sql-server/

  • 相关阅读:
    C# Split() 去除 分组
    C#获取当前路径的7种方法
    给 C# 开发者的代码审查清单
    【知乎】一句话答案收录集,一句足矣
    C# string和byte[]的转换
    WCF 有零个操作;协定必须至少有一个操作
    WPF中动态改变控件显示位置
    转 将iPhone和Android手机屏幕投影仪投影显示
    转 MySQL数据库监控软件lepus使用问题以及解决办法
    转 Shell中的IFS解惑
  • 原文地址:https://www.cnblogs.com/jancco/p/3339321.html
Copyright © 2011-2022 走看看