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. Ubuntu Sublime Text 设置等宽字体

    { "font_face": "DejaVu Sans Mono", "font_size": 10, "word_wrap&qu ...

  2. SPI机制

    Service Provider Interface 是java的服务提供的发现机制,很多框架中都有用到. 使用这个机制需要做以下几步: 1,在calsspath下见一个目录:META-INF\ser ...

  3. PARSEC-3.0编译错误

    OS: Ubuntu 14.04 LTS (x86_64) ***error 1 OpenSSL 1.0.1e 与 perl5.18 不兼容 POD document had syntax error ...

  4. 新冲刺Sprint3(第四天)

    一.Sprint介绍 实现了SQLite数据库记录自动登录.注销功能 真机测试效果图:     二.Sprint周期 看板: 燃尽图:

  5. apk下载解决微信扫一扫问题

    .btn{display: block;width:100%;padding:10px;border:none;cursor: pointer;outline: none;} .btn-primary ...

  6. Scrolliview

    package com.example.scrollview; import android.os.Bundle;import android.app.Activity;import android. ...

  7. 终于在cmd窗口里出现了颜色了!!!感动ing……

    在窗口的中央打印三行字. 要求: 第一行绿色字 第二行绿底红色 第三行白底蓝色 assume cs:code, ds:data data segment db 'welcome to masm!' d ...

  8. HDU-2243 考研路茫茫——单词情结(AC自动机)

    题目大意:给n个单词,长度不超过L的单词有多少个包含n个单词中的至少一个单词. 题目分析:用长度不超过L的单词书目减去长度在L之内所有不包含任何一个单词的书目. 代码如下: # include< ...

  9. Combination Sum II

    public class Solution { public List<List<Integer>> combinationSum2(int[] candidates, int ...

  10. LINUX测试环境部署mysql(三)

    安装配置mysql 1.安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yum list mysql* 安 ...