zoukankan      html  css  js  c++  java
  • Sqlserver:Null值

    NULL:未知数据

    NULL的运算:有null的任何运算都是null,除了以下:

    • set ansi_null of 时:null = null 的结果为 true
    • set concat_null_yields_null off时:null作为空字符串处理(但如果参与运算的所有参数都是null,结果当然是null了)

    NULl函数

    is [not] null: 只能用做条件判断表达式,是否是null?是 条件为true,不是 条件为false

    isnull():函数,如果第一个参数是null,则用第二个参数的值替换第一个参数的值作为函数的返回值。记住:第二个参数的类型必须和第一个兼容!

    nullif():函数,如果两个参数值相等、有一个参数是null、或两个参数是null,函数返回值是null;否则 返回第一个参数的值


    SET ANSI_NULLS { ON | OFF }

    SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。

    当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。

    当 SET ANSI_NULLS 为 ON 时,所有对空值的比较均取值为 UNKNOWN。当 SET ANSI_NULLS 为 OFF 时,如果数据值为 NULL,则所有数据对空值的比较将取值为 TRUE。如果未指定,则应用当前数据库的 ANSI nulls 选项的设置。有关 ANSI nulls 数据库选项的详细信息,请参阅 ALTER DATABASE (Transact-SQL)设置数据库选项

    仅当某个比较操作数是值为 NULL 的变量或文字 NULL 时,SET ANSI_NULLS ON 才会影响比较。如果比较双方是列或复合表达式,则该设置不会影响比较。

    为使脚本按预期运行,不管 ANSI nulls 数据库选项或 SET ANSI_NULLS 的设置如何,请在可能包含空值的比较中使用 IS NULL 和 IS NOT NULL。

    对于存储过程,SQL Server 使用最初创建存储过程时的 SET ANSI_NULLS 设置值。无论随后何时执行存储过程,SET ANSI_NULLS 的设置都还原为其最初使用的值并生效。当在存储过程内部调用 SET ANSI_NULLS 时,其设置不更改。

    在执行分布式查询时应将 SET ANSI_NULLS 设置为 ON。

    对计算列或索引视图创建或更改索引时,SET ANSI_NULLS 也必须为 ON。如果 SET ANSI_NULLS 为 OFF,则针对表(包含计算列或索引视图的索引)的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。SQL Server 将返回一个错误消息,该错误消息会列出所有违反所需值的 SET 选项。另外,在执行 SELECT 语句时,如果 SET ANSI_NULLS 为 OFF,则 SQL Server 将忽略计算列或视图的索引值并解析 Select 语句,就好像表或视图没有这样的索引一样。

    SQL Server 的 SQL 本机客户端 ODBC 驱动程序和 SQL 本机客户端 OLE DB 访问接口在连接时会自动将 ANSI_NULLS 设置为 ON 。该设置可以在 ODBC 数据源、ODBC 连接属性或 OLE DB 连接属性(它们在连接到 SQL Server 之前在应用程序中设置)中进行配置。对于来自 DB-Library 应用程序的连接,SET ANSI_NULLS 的默认值为 OFF。

    当 SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_NULLS。

    SET ANSI_NULLS 的设置是在执行或运行时设置,而不是在分析时设置。

    SET ANSI_NULL_DFLT_ON {ON | OFF}

    当数据库的 ANSI null default 选项为 false 时,修改会话的行为以覆盖新列的默认为空性。

    仅当在 CREATE TABLE 和 ALTER TABLE 语句中没有指定列的为空性时,该设置才能影响新列的为空性。SET ANSI_NULL_DFLT_ON 为 ON 时,如果没有显式指定列的为空性状态,则使用 ALTER TABLE 和 CREATE TABLE 语句创建的新列可以使用空值。SET ANSI_NULL_DFLT_ON 对使用显式 NULL 或 NOT NULL 创建的列无效。

    不能同时将 SET ANSI_NULL_DFLT_OFF 和 SET ANSI_NULL_DFLT_ON 设置为 ON。如果将一个选项设置为 ON,则将另一个选项设置为 OFF。因此,可以将 ANSI_NULL_DFLT_OFF 或 ANSI_NULL_DFLT_ON 设置为 ON,或者将二者都设置为 OFF。如果有一个选项为 ON,则该设置(SET ANSI_NULL_DFLT_OFF 或 SET ANSI_NULL_DFLT_ON)生效。如果将这两个选项都设置为 OFF,则 SQL Server 2005 将使用 sys.databases 目录视图中 is_ansi_null_default_on 列的值。

    为使 Transact-SQL 脚本在含有不同为空性设置的数据库中获得更可靠的操作,最好始终在 CREATE TABLE 和 ALTER TABLE 语句中指定 NULL 或 NOT NULL。

    进行连接时,SQL Server 的 SQL Native Client ODBC 驱动程序和 SQL Native Client OLE DB 访问接口会自动将 ANSI_NULL_DFLT_ON 设置为 ON。对于来自 DB-Library 应用程序的连接,SET ANSI_NULL_DFLT_ON 的默认设置为 OFF。

    SET ANSI_DEFAULTS 为 ON 时,将启用 SET ANSI_NULL_DFLT_ON。

    SET ANSI_NULL_DFLT_ON 的设置是在执行或运行时设置的,而不是在分析时设置的。

    SET ANSI_NULL_DFLT_OFF { ON | OFF }

    数据库的 ANSI null default 选项为 true 时,更改会话行为以覆盖新列的默认为空性。

    仅当 CREATE TABLE 和 ALTER TABLE 语句中没有指定列的为空性,此设置才能影响新列的为空性。默认情况下,当 SET ANSI_NULL_DFLT_OFF 为 ON 时,如果没有显式指定列的为空性状态,则使用 ALTER TABLE 和 CREATE TABLE 语句创建的新列将为 NOT NULL。SET ANSI_NULL_DFLT_OFF 对使用显示 NULL 或 NOT NULL 创建的列无效。

    不能同时将 SET ANSI_NULL_DFLT_OFF 和 SET ANSI_NULL_DFLT_ON 设置为 ON。如果将一个选项设置为 ON,则将另一个选项设置为 OFF。因此,可以将 ANSI_NULL_DFLT_OFF 或 SET ANSI_NULL_DFLT_ON 设置为 ON,或者将二者都设置为 OFF。如果有一个选项为 ON,则该设置(SET ANSI_NULL_DFLT_OFF 或 SET ANSI_NULL_DFLT_ON)生效。如果将这两个选项都设置为 OFF,则 SQL Server 2005 将使用 sys.databases 目录视图中 is_ansi_null_default_on 列的值。

    为使 Transact-SQL 脚本在包含不同为空性设置的数据库中获得更可靠的操作,最好始终在 CREATE TABLE 和 ALTER TABLE 语句中指定 NULL 或 NOT NULL。

    SET ANSI_NULL_DFLT_OFF 的设置是在执行或运行时设置的,而不是在分析时设置的。

  • 相关阅读:
    git基本
    openwrt 固件的uci系统
    openwrt刷固件恢复原厂固件
    openwrt 登录管理页面openwrt管理页面密码
    openwrt固件升级方法
    OpenWrt简要介绍openwrt开发
    X86 openWRT 虚拟机编译教程 在ubuntu10中X86 OpenWRT的源码编译
    无线热点认证解决方案 WifiDog
    怎么把wifidog直接编译进openwrt
    portal为什么选择开源路由器第三方固件 OpenWrt
  • 原文地址:https://www.cnblogs.com/jinzhenshui/p/1596487.html
Copyright © 2011-2022 走看看