如何在MS SQL运行时确定CONCAT_NULL_YIELDS_NULL的默认值

时间:2016-08-10 19:17:00

标签: sql-server tsql sql-server-2008-r2

根据MS SQL 2008R2的Microsoft文档,

  

1)如果未指定SET CONCAT_NULL_YIELDS,则应用CONCAT_NULL_YIELDS_NULL数据库选项的设置   2)SET CONCAT_NULL_YIELDS_NULL的设置在执行或运行时设置,而不是在解析时设置

我将此解释为

  

只要连接到数据库而不提供SET CONCAT_NULL_YIELDS_NULL命令,它就会默认从数据库选项中设置它

为了验证这一点,我创建了一个名为Test的数据库,其中包含选项CONCATENATE NULL YIELDS NULL=FALSE和一个登录名,默认使用此数据库并使用SQLCMD执行以下SQL语句。

set nocount on
declare @dbName sysname

select @dbName = DB_NAME() 
select 'I am in database =',@dbName


select 'The CONCAT_NULL_YIELDS_NULL setting is =', is_concat_null_yields_null_on 
from sys.databases
where name = @dbName

IF ( (4096 & @@options) = 4096 ) 
begin
   select 'CONCAT_NULL_YIELDS_NULL is ON' 
end
else
begin
   select 'CONCAT_NULL_YIELDS_NULL is OFF' 
end
go

上述SQL的输出是

I am in database = Test

                                         is_concat_null_yields_null_on

The CONCAT_NULL_YIELDS_NULL setting is = 0



CONCAT_NULL_YIELDS_NULL is ON

为什么CONCAT_NULL_YIELDS_NULL ON应该是OFF,因为数据库Test将此选项设置为OFF?

我对M.S文件的解释是不正确的还是文档本身错了?

我知道此功能已标记为弃用,但我的理解是它仍然对MS SQL2008R2有效。

1 个答案:

答案 0 :(得分:1)

数据库选项不是很相关,因为各种客户端库和工具都有自己的默认值,无论如何它们都是在连接时代表你设置的。

Erland Sommarskog lists them here

enter image description here