• SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同


        在对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 NULLTHEN expression1
       ...
       
    WHEN (expressionN IS NOT NULLTHEN expressionN
       
    ELSE NULL
  • 相关阅读:
    HDU5779 Tower Defence
    Python练习题2.14求整数段和
    Python练习题2.13分段计算居民水费
    Python练习题2.12输出三角形面积和周长
    Python练习题2.11求平方与倒数序列的部分和
    Python练习题2.9比较大小
    Python练习题2.8转换函数使用
    Python练习题2.7产生每位数字相同的n位数
    Python练习题2.6求交错序列前N项和
    Python练习题2.5求奇数分之一序列前N项和(存在问题)
  • 原文地址:https://www.cnblogs.com/Charles2008/p/1674855.html
Copyright © 2020-2023  润新知