日期:2014-05-17  浏览次数:20387 次

连接空值得到空值
SQL code


ALTER DATABASE XMMDS SET CONCAT_NULL_YIELDS_NULL OFF
select databasepropertyex('XMMDS','ISNULLCONCAT')
/*

0

*/


SELECT 'ACVS'+NULL


/*
NULL

*/
--请问这是为什么



------解决方案--------------------
根据存储引擎中介绍
set 选项总是会覆盖相应的数据库选项,不论SET选项是on还是off.
数据库起作用唯一情况是SET选项没有被碰过时
因此可以吧ANSI_NULL及CONCAT_NULL_YIELDS_NULL 选项想象成三种值:ON,OFF,从未被设置
如果SET选项是OF或者OFF数据库选项就会被忽略
建议用户写查询与选项无关的查询
如果非要写选项
用户应该依赖会话级别的选项而不是数据库级别的选项
------解决方案--------------------
需要注意的是
许多工具
例如ODBC,包括SQL Server Management等连接SQL Server工具
都会启用会话级别的选项
这些选项会覆盖数据库选项,是的看起来ON行为好像是默认行为一样

DBCC USEROPTIONS可以看到当前连接被显式设置的值quoted_identifier SET
arithabort SET
ansi_null_dflt_on SET
ansi_warnings SET
ansi_padding SET
ansi_nulls SET
concat_null_yields_null SET