设为首页 收藏本站
查看: 772|回复: 0

[经验分享] SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同

[复制链接]

尚未签到

发表于 2018-10-11 12:40:04 | 显示全部楼层 |阅读模式
  在对window CE 5.0手持机程序开发过程中,使用了SQL Server CE 3.5的数据库,由于需要筛选出某个字段不为空(包括null和"")的情况的数据。故使用ISNULL函数来替换null的情况,然而在使用的过程中,发现SQL Server CE 中的ISNULL函数和SQL Server 2000或SQL Server 2005中的函数ISNULL不太一样。为什么会有这样的差别呢?带着问题经过思考找到了答案。
  一、先看看一个SQL Server 2000中的SQL语句:
  TestIsNull表的全部数据如下:(SELECT * FROM [TestIsNull])
  TransactionNumber   Name   WorkName
  1                   test1    NULL
  2                   test2    NULL
  3                   test3    NULL
  4                   test4    NULL
  5                   test5    NULL
  6                   test6    NULL
  7                   test6
  8                   test00   workName
  我们使用ISNULL函数
  select TransactionNumber,Name,isnull(WorkName,'') as NewWorkName from TestIsNull
  得到的结果集如下:
  TransactionNumber   Name     NewWorkName
  1                   test1
  2                   test2
  3                   test3
  4                   test4
  5                   test5
  6                   test6
  7                   test6
  8                   test00   workName
  可见SQL Server 2000针对ISNULL函数的用法是(SQL Server 2005也如此):
  使用指定的替换值替换 NULL
  语法:ISNULL(check_expression,replacement_value)
  参数:check_expression 将被检查是否为NULL的表达式。check_expression可以是任何类型的。
  replacement_value 在check_expression为NULL时将返回的表达式。replacement_value必须与check_expression具有相同的类型。
  返回值:返回与check_expression相同的类型。
  注释:如果check_expresssion不为NULL,那么返回该表达式的值;否则返回replacement_value。
  二、SQL Server CE中的ISNULL的用法。
  数据库的表TestIsNull表结构和数据同上:我们先来看看同样一条SQL语句在SQL Server CE中查询出来的数据是什么?
  SELECT transactionNumber, Name, ISNULL(WorkName, '') AS NewWorkName
  FROM TestIsNull
  TransactionNumber
  Name
  NewWorkName
  1
  test1
  True
  2
  test2
  True
  3
  test3
  True
  4
  test4
  True
  5
  test5
  True
  6
  test6
  True
  7
  test6
  False
  8
  test00
  False
  很明显和上面用SQL Server 2000查询出来的结果不一样。通过观察发现这里的ISNULL中的第二个参数无效,这里只判断了WorkName字段是否为NULL,如果为NULL,则ISNULL(WorkName,'')返回值为True,否则为False。
  最后通过查找SQL CE的帮助文档,终于找到原因了:
  官方的SQL Server Compact Edition不支持的ISNULL,但所描述的行为尽管没有SQL语法错误,或者抛出异常情况。另一个接合函数(COALESCE)可以替代ISNULL的功能,返回第一个非空参数。
  我们用COALESCE来模仿上面的ISNULL的写法:
  SELECT transactionNumber, Name, COALESCE (WorkName, '') AS NewWorkName
  FROM  TestIsNull
  这样通过查询出来的结果集就和SQL Server 2000(或SQL Server 2005)查询出来的结果集一样了。
  下面简单介绍一下关于COALESCE函数的用法:
  COALESCE 返回其参数中第一个非空表达式。
  语法:COALESCE (expression [,...n])
  参数:expression:任何类型的表达式。n:表示可以指定多个表达式的占位符。所有表达式必须是相同类型。或者可以隐式转换成相同的类型。
  返回值:将相同的值作为expression返回。
  注释:如果所有自变量均为NULL,则COLALESCE返回NULL值。COALESCE(expression,...n)与此CASE函数等价:
  CASE
  WHEN (expression1 IS NOT NULL) THEN expression1
  ...
  WHEN (expressionN IS NOT NULL) THEN expressionN
  ELSE NULL
  原文出处:http://www.diybl.com/course/7_databases/sql/sql2005/20100719/449426.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620387-1-1.html 上篇帖子: PL/SQL入门--基本结构 下篇帖子: SQL SERVER2000教程-第七章 Transact-SQL编程 第五节 事务和锁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表