一、SQLserver 默认连接选项
当我们连接sqlserver数据库时,我们发现Sqlserver Profiler 里面的Audit Login 事件:
-- network protocol: TCP/IP 1 set quoted_identifieron 2 set arithabortoff 3 set numeric_roundabortoff 4 set ansi_warningson 5 set ansi_paddingon 6 set ansi_nullson 7 set concat_null_yields_nullon 8 set cursor_close_on_commitoff 9 set implicit_transactionsoff 10 set language 简体中文 11 set dateformat ymd 12 set datefirst7 13 set transaction isolation level read committed
|
1 set quoted_identifieron
ON:表示标识符可以由双引号分隔,而文字必须由单引号分隔. eg:
select * from "students"where "name"='lili'.
OFF: 文字可以用单引号,也可以用双引号.
(1)当对数据库中的对象名使用保留关键字时,SET QUOTED_IDENTIFIER 必须为 ON。
(2)当在计算列或索引视图上创建或操作索引时,SET QUOTED_IDENTIFIER 必须为 ON。如果 SET QUOTED_IDENTIFIER 为 OFF,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。
2 set arithabortoff
在登录会话中,应始终将 ARITHABORT 设置为 ON。 将 ARITHABORT 设置为 OFF 可能对查询优化产生负面影响,进而导致性能问题。
3 set numeric_roundabortoff
ON: 在表达式中出现精度损失时将生成错误。
OFF:精度损失不生成错误信息,并且将结果舍入为存储结果的列或变量的精度。
4 set ansi_warningson
ON:
(1)如果聚合函数(如 SUM、AVG、MAX、MIN、STDEV、STDEVP、VAR、VARP 或 COUNT)中出现空值,将生成警告消息.
(2) 被零除错误和算术溢出错误将导致回滚语句,并生成错误消息。
OFF:
(1)不发出警告.
(2)被零除错误和算术溢出错误将导致返回空值。
5 set ansi_paddingon
推荐设置为:ON
6 set ansi_nullson
ON:
(1)在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。
(2)当 column_name 中包含空值,使用 WHERE column_name =NULL 的 SELECT 语句仍返回零行。 即使 column_name 中包含非空值,使用 WHERE column_name<> NULL 的 SELECT 语句仍会返回零行。
OFF:
(1) 使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。
7 set concat_null_yields_nullon
ON:串联空值与字符串将产生 NULL 结果.eg:SELECT 'abc' + NULL 将生成 NULL.
OFF:空值作为空字符串处理.eg: SELECT 'abc' + NULL 将生成 abc.
8 set cursor_close_on_commitoff
ON:遵从 ISO 标准,在提交或回滚时关闭所有打开的游标.
OFF:则在提交事务时将不关闭游标.
9 set implicit_transactionsoff
ON:(1)隐式事物模式,即每句sql操作默认开启事物,用户必须在该事务结束时将其显式(手动commit)提交或回滚。否则,当用户断开连接时,事务及其包含的所有数据更改将被回滚。
(2)当SET IMPLICIT_TRANSACTIONS 为 ON 时执行 BEGIN TRANSACTION 语句会导致打开两个嵌套的事务;外层的rollback会回滚掉内层事务的所有commit修改.
OFF: 切换到「自动提交模式」下,所有单个语句在成功完成时将被提交。
set implicit_transactionson select @@TRANCOUNT--查看事务个数 begin transaction -- 显式调用事务 update test..studentsset passwd='123456' where name='lili' commit transaction --Commit outstanding transaction. COMMIT TRANSACTION; |
sample:
10 set language 简体中文
11 set dateformat ymd
12 set datefirst7s
13 set transaction isolation level read committed
|
| ODBC(default) | MSDN提示是否可在ODBC设置 | now |
1 | quoted_identifier | ON | √ | ON |
2 | arithabort | - | × | OFF |
3 | numeric_roundabort | - | × | OFF |
4 | ansi_warnings | ON | √ | ON |
5 | ansi_padding | ON | √ | ON |
6 | ansi_nulls | ON | √ | ON |
7 | concat_null_yields_null | - | × | ON |
8 | cursor_close_on_commit | OFF | √ | OFF |
9 | implicit_transactions | OFF | √ | OFF |
二、如何设置这些属性
1. 在数据源中设置
该设置可以在 ODBC 数据源、ODBC 连接属性或 OLE DB 连接属性(它们在连接到 SQL Server 实例之前在应用程序中设置)中进行配置。
(控制面板->管理工具->数据源ODBC)
2. 在服务器端设置:(√可设置开启)
参考
微软中国TechNet:https://technet.microsoft.com/zh-cn/library/ms190356(v=sql.120).aspx