关于update的疑问

Jelindu 2012-02-23 10:42:21
UPDATE users SET Remarks = 'fff'+Remarks WHERE OrderID=123456

这条语句,当remarks本身为null的时候,为什么更新后的值还是null,而不是fff
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jelindu 2012-02-23
  • 打赏
  • 举报
回复
小弟谢谢各位大佬,我去试试。
黄_瓜 2012-02-23
  • 打赏
  • 举报
回复
可能你对null的理解还不透彻吧。





1)、当在SELECT子句使用连接符“+”连接表达式时,如果有一列为NULL,则得到的结果也为NULL,当与NULL值作运算时,情况同上(逻辑运算符OR运算时除外,当TRUE OR NULL时,结果为TRUE,但FALSE OR NULL时结果为UNKNOW)
2)、在ORDER BY 子句中,NULL值被认为是最小可能(即,如果是升序排序 ,则NULL会排在第一位)
3)、NULL的判断不能简单的用=或!= 而只能使用IS (NOT) NULL来判断,可以使用ISNULL函数来对NULL值进行替换(即第一个参数为NULL式,将其替换为第二个参数的值)
4)、在连接语句(外连接中),左表或右表失配的元素会被设为NULL值(可以变通地通过这个特征得到左表有而右表没有记录,反之亦然),另外,在表的内部连接中,如果要连接的列都含有NULL值,则它们被认为是相互不匹配的,因此,如果其中一个连接表的列中出现NULL,只能通过外部连接返回这些值(除非WHERE子句不包括空值。
5)、在GROUP BY 子句中,NULL值会被分为一组,而不是被忽略,另外,在CUBE ROOLUP汇总语句中,会由运算符操作生成NULL值 ,怎么样区别NULL是记录本身的还是系统生成的呢? 答案就是GROUPING(列名)==1
6)、NULLIF函数,如果指定的两个表达式等价,则返回空值
7)、DATALENGTH函数可以返回用于表示任何表达式的字节数,但要注意 NULL的DATALENGTH仍是NULL
8)、有一个函数会把NULL统计在内,那就是COUNT(*),除此之外,所有的聚合函数均会“忽略”NULL值(注意,不是把结果搞成NULL),(还要注意,MAX MIN函数虽然也会忽略NULL,但当所有行都是NULL值时,它便只能返回NULL了)
9)、表的约束中,主键具有唯一性约束并且不允许NULL值 ,但单独的UNIQUE约束可以存在一个NULL值,当一个表设置了外键约束时,它可接收的值一种是在参照列中存在的值,还可以是NULL值,在主键约束中不必再指定NOT NULL,但如果显式指定为NOT NULL系统也是允许的
10)、表的插入操作,当要插入的数据为空时,要显式指定为NULL而不能什么都不写
11)、使用IN 子查询的方式实现“集合交”的操作时,IN 关键字会排除NULL值,而结果集中会有重复值出现,这点和intersect 是不同的,不管是null in (null) 还是null not in (null)其结果都是FALSE
12)、exists子查询中使用NULL仍然会返回结果集,如:
select * from bookinfo where exists(select null) order by bookid--仍然会返回结果
13)、多列外键约束时,如果没有NULL值则系统会强制每个列全部匹配 ,但如果其中一列存在NULL值 则系统会放弃检查,这有可能引起数据完整性的问题,因此 ,此类问题最好在约束的每个列上增加not null约束。例如,如果a(sid,sname) references b(id,name) ,当向a 表插入类似values(' 随便一个不匹配的数字’,NULL)时,并不会引起数据插入失败,从而失去约束的效果
14)、当一个表在创建时没有设置主键,利用修改表语句添加主键时,则要实施主键约束的列必须已经具有not null约束
15)、当使用CHECK约束时,如果后面的表达式返回NULL,则校验会通过
欢迎补充........
dawugui 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 jelindu 的回复:]
UPDATE users SET Remarks = 'fff'+Remarks WHERE OrderID=123456

这条语句,当remarks本身为null的时候,为什么更新后的值还是null,而不是fff
[/Quote]
update users SET Remarks = 'fff'+isnull(Remarks,'') WHERE OrderID=123456

AcHerat 元老 2012-02-23
  • 打赏
  • 举报
回复
null是不能做比较的,运算后得到的依然是NULL。

可以把语句改为 'fff'+isnull(Remarks,'')
Jelindu 2012-02-23
  • 打赏
  • 举报
回复
如果 remarks字段不为空的时候,又是正常的。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧