ALTER DATABASE XMMDS SET CONCAT_NULL_YIELDS_NULL OFF
select databasepropertyex('XMMDS','ISNULLCONCAT')
/*0*/
SELECT 'ACVS'+NULL
/*
NULL*/
--请问这是为什么

解决方案 »

  1.   

    null 加减乘除任何值还是null 呀,没有问题呀?--你可以这样:
    SELECT 'ACVS'+isnull(NULL,'')
      

  2.   

    你要看清我之前的ALTER DATABASE
    这个设置允许连接空值忽略空值
    我的select 'safds'+null 理论值应该得到 safds
      

  3.   

    NULL 并不是空值!! 应该叫未知值
    ''才是空值
    任何字符串连接一个未知值,结果都是未知的
      

  4.   

    你看到 ALTER DATABASE XMMDS SET CONCAT_NULL_YIELDS_NULL OFF
    你感觉我说的空值是''么?只是中文翻译过来的NULL都是叫空值。不过还是谢谢指点
      

  5.   

    我知道你说的是什么,只是告诉你要这样理解null 和 ''的区别,
    实际上我也经常叫null值为空值,翻译什么的容易让人混淆
      

  6.   

    SQL 的null 值
    SQL 中的NULL 值,表示不知道(UNKNOWN)的数据,用作不知道数据的具体值,或者不
    知道数据是否存在,或者数据不存在等情况。因为引入了NULL 值,故此SQL 的逻辑系统是
    三值逻辑系统——FALSE、TRUE、NULL 三种值构成的逻辑系统。
    1、OR、AND、NOT 真值表
    A B A OR B A AND B NOT A
    FALSE FALSE FALSE FALSE TRUE
    FALSE TRUE TRUE FALSE ‐
    FALSE NULL NULL FALSE ‐
    TRUE FALSE TRUE FALSE FALSE
    TRUE TRUE TRUE TRUE ‐
    TRUE NULL TRUE NULL ‐
    NULL FALSE NULL FALSE NULL
    NULL TRUE TRUE NULL ‐
    NULL NULL NULL NULL ‐
    因为NULL 当UNKNOWN 来理解,因此,当值为NULL 时,它既有可能是FALSE 也有可能是
    TRUE。如果计算结果只有一种可能,则取该种可能;如果计算结果既有可能是FALSE,也有
    可能是TRUE,那么结果便为NULL。例如,NOT NULL,其结果也有两种可能,因此NOT NULL
    的结果是NULL。再例如,NULL AND TRUE,则其结果也有两种可能,因此NULL AND TRUE
    的结果是NULL。但是,NULL OR TRUE,或是NULL AND FALSE,前者结果为TRUE,单是一个
    TRUE 出现,便足以知道结果为TRUE;后者结果为FALSE,单是一个FALSE 出现,便足以知
    道结果为FALSE。这是OR 和AND 的特性决定的。
    2、比较运算符及算术运算符中的NULL
    比较运算符及算术运算符中的NULL,会导致运算结果也为NULL。如3+NULL 的结果为NULL,
    NULL>=5 的结果为NULL,等等。
    3、BETWEEN AND、IN 中的NULL
    A BETWEEN B AND C 意为A>=B AND A<=C,因此其产生NULL 值的情况,可以参照后者判
    断。A NOT BETWEEN B AND C 相应等价于NOT(A>=B AND A<=C)。
    A IN(B,C,D)意为A=B OR A=C OR A=D,因此其产生NULL 值的情况,可以参照后者判断。A NOT
    IN(B,C,D)相应等价于NOT(A=B OR A=C OR A=D)。当集合为空时,IN 的结果为FALSE,NOT IN
    的结果则为TRUE。
    4、EXISTS、IS NULL
    EXISTS(以及NOT EXISTS)、IS NULL(以及IS NOT NULL),均只产生FALSE 或TRUE,而不
    产生NULL。
    5、ANY、ALL
    在一个值与一个集合(一组值)比较时,比较运算符可以加上ANY(或SOME,作用相同)
    或ALL。
    A>ANY(B,C,D)意为A>B OR A>C OR A>D,因此其产生NULL 值的情况,可以参照后者判断。
    当集合为空时,ANY 的结果为FALSE。
    A>ALL(B,C,D)意为A>B AND A>C AND A>D,因此其产生NULL 值的情况,可以参照后者判断。
    当集合为空时,ALL 的结果为TRUE。
    6、WHERE、HAVING、ON 条件筛选,与完整性约束检查
    在WHERE、HAVING、ON 条件筛选中,只保留结果为TRUE 的,而不处理FALSE 及NULL
    的。但在完整性约束检查中,只有结果为FALSE 的,才违反约束检查,NULL 并不违反。
      

  7.   

    任何字符串与null相加,返回null,可以用isnull()检查是否为null,并给在null替换的字符,
    SELECT 'ACVS'+ isnull(NULL,'')
      

  8.   

    NO NO NO ,对于焦急的我来说,谁能解决我的问题,谁就是高手,你懂得
      

  9.   


    -- 数据库级设置,首先确认语句是否在 XMMDS 库中执行:
    USE XMMDS
    GOSELECT 'ACVS'+NULL
    -- 会话级的设置SET CONCAT_NULL_YIELDS_NULL ON
    SELECT 'ACVS'+NULLSET CONCAT_NULL_YIELDS_NULL OFF
    SELECT 'ACVS'+NULL
      

  10.   


    空值基本上认为是NULL,''一般叫空串,不叫空值。
      

  11.   

    这个设置貌似要用的时候再set才有用
    ALTER DATABASE AdventureWorks SET CONCAT_NULL_YIELDS_NULL OFF
     select databasepropertyex('AdventureWorks','ISNULLCONCAT')
     
     
     SET CONCAT_NULL_YIELDS_NULL OFF
     SELECT 'ACVS'+NULL
     /*
     
     ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     0
     
     (1 行受影响)
     
     
     -----
     ACVS
     
     (1 行受影响)
     
     */
      

  12.   


    alter database ,sp_dboption 都设置过,也不行。这个设置明明是,DC级别,为什么非要设置会话级别
    SQL 2000 的sp_dboption有 concat null yields null 这项设置
      

  13.   

    根据存储引擎中介绍
    set 选项总是会覆盖相应的数据库选项,不论SET选项是on还是off.
    数据库起作用唯一情况是SET选项没有被碰过时
    因此可以吧ANSI_NULL及CONCAT_NULL_YIELDS_NULL 选项想象成三种值:ON,OFF,从未被设置
    如果SET选项是OF或者OFF数据库选项就会被忽略
    建议用户写查询与选项无关的查询
    如果非要写选项
    用户应该依赖会话级别的选项而不是数据库级别的选项
      

  14.   

    别说2000,我在08R2上执行你的最开始的语句也是和你的结果一样,所以和版本无关。只是库名不一样而已。所以我觉得和session有关,再研究一下
      

  15.   

     SET CONCAT_NULL_YIELDS_NULL OFF
     GO
     create proc P_TEST
     as
     
     SELECT 'ACVS'+NULL
     
     GO
     
     exec P_TEST
     /*-----
    ACVS(1 行受影响)*/
      

  16.   

    需要注意的是
    许多工具
    例如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