判断变量是否为NULL:
IF (@VaribleName IS NULL)
选择字段值为NULL的记录:
WHERE COLUMN_NAME IS NULL
ISNULL()函数:
ISNULL(@VaribleName, 'DefaultValue')
ISNULL(COLUMN_NAME, 'Default Value')
SQL Server:关于Null的一些事
我们设计表时,在字段是否允许Null值这个问题上,有时会争论一番。数据库牛人Kalen Delaney则给了一下建议
1,永远不要在用户表中允许NULL值
2,在用户表定义中包含一个NOT NULL限制
3,不要依赖数据库属性来控制NULL值的行为
对于第一点,我们反向说,如果允许NULL,会给我们带来什么影响。
1,SQL 在每条记录中都设置了一个特殊的bitmap来显示哪些允许空值的列上存储的真的是空值。如果是NULL,在访问每一行的时候SQL Server都必须对这个bitmap进行解码。
2,允许NULL还增加了应用程序代码的复杂度,总的添加一些特殊的逻辑来处理这个NULL值,这常常会导致bug。
第二点,在包含不允许NULL的列上,要加入一些默认值,如果不允许NULL,但是还没有加默认值,在没有显示列插入的话,就会造成INSERT的失败,SQL Server默认在INSERT中,对没有显示的列做NULL插入。
最后一点,主要涉及到于NULL值的比较。在我们印象中,是用IS NULL,IS NOT NULL比较呢,还是用=,<>比较呢。这取决于数据库选项ANSI NULLS,我们不可能更改数据库选项(我们大部分不是DBA),但是我们可以使用会话设置SET ANSI_NULLS相当于数据库选项ANSI NULLS。当这个选项为真是,所有与空值的比较都将得出FALSE,代码必须使用IS NULL条件来判断是否为空,而当这个选项为假时,如果进行比较的两个值都是空值将得出TRUE,SQL Server允许将 =NULL作为IS NULL的同义词,将<> NULL 作为IS NOT NULL的同义词。
如果忘记这个选项,建议用IS NULL判断空,IS NOT NULL判断非空。
一、判断变量是否为null
if (@VaribleName is null)
二、选择字段值为null的记录
select * from orders where price is null --price等于null
select * from orders where price is not null --price不等于null
三、使用ISNULL函数对Null值替换
函数判断一对象是否为空,如果为空,则替换成指定的默认值。
1、语法
ISNULL ( check_expression , replacement_value )
2、参数说明
check_expression
将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。
replacement_value
为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
3、返回值
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
4、常用情况
ISNULL(@VaribleName, 'DefaultValue')
ISNULL(COLUMN_NAME, 'Default Value')
四、sql server null值的使用需要注意的地方
1、null与任何运算符运算后都为null
普通的值一般都可能进行运算符操作,但例如:ID列为int,所以可以这样:ID=ID+1等,但如果一列的值为null,null+1=null
例如
update testNull
set b=b+1
where b is null
查询后发现b的值没有变化,仍然为null.
2、任何值与null比较时都会返回false
普通的值可以进行"="操作,例如条件中一般都会这样出现:sUserName='张三',如果sUserName的值为null,要想找出所有名字为null的记录时,不能这样用:sUserName=null,因为null不是一个具体的值,任何值与它比较时都会返回false。此时可借用is null 或者是is not null.
例如
select * from testNull where a=null --返回空结果集
select * from testNull where b is null --返回结果集 2 2 NULL
说明null是不能用"="来比较,可用is null来替换
3、当统计的记录中的包含有null值时,它会忽略null值
例如在用统计函数count时会不同,例如count(ID):统计记录数.当统计的记录中的包含有null值时,它会忽略null值.
4、对于in 的影响不同
示例查询:查询testNull表中b的值包含在null中的记录.
select * from testNull where b in(null) --没有任何记录
in在查询时会忽略null的记录,查询的时候可用is not null来查询
5、排序时顺序有不同
当使用ORDER BY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。
6、永远不会有什么数据等于NULL
1不等于NULL,2也一样。但NULL也不等于NULL。所以我们只能比较它“是”或“不是”。
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔