根据MS 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?
我对M.S文件的解释是错误的还是文件本身是错的?
我知道这个特性被标记为弃用,但我的理解是,它对于MS SQL2008R2仍然是活动的。
发布于 2016-08-10 19:25:22
https://stackoverflow.com/questions/38881803
复制相似问题