比较空值时必须小心。比较行为取决于选项 SET ANSI_NULLS 的设置。当 SET ANSI_NULLS 为 ON 时,如果比较中有一个或多个表达式为 NULL,则既不输出 TRUE 也不输出 FALSE,而是输出 UNKNOWN。这是因为,未知值不能与其它任何值进行逻辑比较。这种情况发生在一个表达式与 NULL 单词进行比较,或者两个表达式相比,而其中一个表达式取值为 NULL 时。例如,当 ANSI_NULLS 为 ON 时,以下比较总是输出 UNKNOWN:ytd_sales > NULL只要变量包含 NULL 值,下列比较也输出 UNKNOWN:ytd_sales > @MyVariable

解决方案 »

  1.   

    QUOTED_IDENTIFIER ON 分隔标识符
    当 QUOTED_IDENTIFIER 为 ON 时,对于 SQL 语句中的双引号和单引号 (') 的使用,SQL Server 遵循 SQL-92 规则: 双引号只能用于分隔标识符,不能用于分隔字符串。 
    为保持与现有应用程序的兼容性,SQL Server 并不完全强制该规则。如果字符串没有超过标识符的长度,则该字符串可包含在双引号内。但不建议这样做。单引号必须用来包含字符串,不能用于分隔标识符。 
    如果字符串包含单引号,则需要在单引号前再增加一个单引号:SELECT * FROM "My Table"
    WHERE "Last Name" = 'O''Brien'当 QUOTED_IDENTIFIER 为 OFF 时,对于双引号和单引号的使用,SQL Server 遵循如下规则: 引号不能用于分隔标识符,而是用括号作为分隔符。
    单引号或双引号可用于包含字符串。 
    如果使用双引号,嵌入的单引号不需要用两个单引号来表示:SELECT * FROM [My Table]
    WHERE [Last Name] = "O'Brien"无论 QUOTED_IDENTIFIER 的设置如何,都可以在括号中使用分隔符。
      

  2.   

    Exists 存在表达中的记录.
      

  3.   

    return 的值,调用的时候可取到.