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/

SQL Server选项综述的更多相关文章

  1. 微软ASP.NET网站部署指南(10):迁移至SQL Server

    1.  综述 第2章的部署SQL Server Compact和第9章的部署数据库更新里解释了为什么终于要升级到完整版SQL Server .本章节将告诉你怎样来做. SQL Server Expre ...

  2. Azure 虚拟机上的 SQL Server 常见问题

    本主题提供有关运行 Azure 虚拟机中的 SQL Server 时出现的一些最常见问题的解答. 如果本文未解决你的 Azure 问题,请访问 MSDN 和 CSDN 上的 Azure 论坛. 你可以 ...

  3. SQL server 2008 r2 安装图文详解

    文末有官网下载地址.百度网盘下载地址和产品序列号以及密钥,中间需要用到密钥和序列号的可以到文末找选择网盘下载的下载解压后是镜像文件,还需要解压一次直接右键点击解如图所示选项,官网下载安装包的可以跳过前 ...

  4. SQL Server 2008R2安装

    SQL Server 2008详细安装过程及配置   https://www.cnblogs.com/rewwensoftware/p/9580697.html SQL Server 2008R2 百 ...

  5. 安装SQL server 提示重新启动计算机失败

    SQL Server2008是一款功能强大.实用性强的mysql数据库管理系统,因此很多用户都会在Win7系统中安装SQL Server2008,但是不少用户在安装过程中遇到问题,安装SQL Serv ...

  6. SQL SERVER性能优化综述

    SQL SERVER性能优化综述 一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的.所以我希望按照软 ...

  7. SQL Server安装完成后3个需要立即修改的配置选项(转载)

    你用安装向导安装了全新的SQL Server,最后你点击了完成按钮.哇噢~~~现在我们可以把我们的服务器进入生产了!抱歉,那并不是真的,因为你的全新SQL Server默认配置是错误的. 是的,你没看 ...

  8. SQL Server 数据库的自动选项

    自动选项影响SQL Server 可能会自动进行的操作,所有的这些都是bool值,值为on 或off 1. auto_close: 当这个为on 时.数据库在最后一个用户退出后完全关闭,这样数据库就不 ...

  9. SQL Server 数据库状态选项

    选项 1. single_user(单用户),multi_user(多用户),restricted_user(受限用户); 描述数据库的用户访问属性,它们互斥,设置其中任何一个选项就会取消对其它选项的 ...

随机推荐

  1. Mac安装GitLab CE记录

    0 REF REF1 原始的GitLab Documentation REF2 Installation-guide-for-GitLab-on-OS-X REF3 如何在Mac 终端升级ruby版本 ...

  2. angular使用echarts折线图

    echarts是开源的画图工具,在angular框架中引入echarts不能直接使用.需要新建一个directive //echarts基本参数 app.factory('$echartsConfig ...

  3. Hot code replace failed

    今天在eclipses中 修改代码,保存时会出时不时出现Hot code replace failed 对话框,谷歌提示是在debug模式下保存修改源代码会出现此类问题.确实,刚刚在用debug功能, ...

  4. 交换技术(swaping) 视频11

    进程挂起的原因 1)进程全部阻塞,处理机空闲 2)系统负荷过重,内存空间紧张 3)操作系统需要,操作系统可能挂起后台进程或者一些服务进程(后台进程 优先级比 前天进程低),或者可能导致系统故障的进程 ...

  5. jsonp解决跨域

    ajax请求: $.ajax({        type: "get",//必须使用get方式        async: false,        url: "htt ...

  6. IIS 301 重定向 带参数链接

    做QQ的单点登陆,身后后发现,填写的是www.51laugh.cn,修改生效需要3天. 直接把根域做301调整,是目前的最佳解决方案. 1.建立一个新的站点,目录指定到任何一个空文件夹就好了.主机头绑 ...

  7. Codeforces Round #169 (Div. 2)

    A. Lunch Rush 模拟. B. Little Girl and Game 因为可以打乱顺序,所以只关心每种数字打奇偶性. 若一开始就是回文,即奇数字母为0或1种,则先手获胜. 若奇数字母大于 ...

  8. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

  9. [leetcode]Binary Tree Maximum Path Sum

    Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...

  10. [原创]cocos2d-x研习录-第三阶 特性之动作

    在前面的Cocos2D-x的概念类中,我们了解到节点类CCNode.导演类CCDirector.场景类CCScene.布景层类CCLayer和精灵类CCSprite等,这些类都是构成游戏画面的基本元素 ...