SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同
2010-02-27 17:21
615 查看
在对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
很明显和上面用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
一、先看看一个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 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
相关文章推荐
- SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同
- SQL Server CE和SQL Server 2000/2005中的ISNULL函数的异同
- asp.net IIS “/”应用程序中的服务器错误 解决方案[sql server 2000和 sql server 2005共存, web.config]
- SQL SERVER 2000 & SQL SERVER 2005 数据缓存依赖
- [转]各种分页 in SQL Server 2005, SQL Server 2000, MS Access and MySQL
- sql server 2000与sql server ce2.0通过SqlCeRemoteDataAccess实现数据同步
- Microsoft 数据库三版本共存:SQL Server 2000(SP4) + SQL Server 2005(SP2) + SQL Server 2008
- sql server 2000与sql server ce2.0通过SqlCeRemoteDataA
- sql server 2000与sql server ce2.0通过SqlCeRemoteDataA
- SQL Server 2000 To SQL Server 2005
- Moving SQL Server 2005 Databases to SQL Server 2000
- sql-server2005数据库 → sql-server2000数据库 的转换
- SQL Server 2005的数据类型与SQL 2000有一些不同
- How to monitor blocking in SQL Server 2005 and in SQL Server 2000 [ZT-MS]
- SQL Server 2005安装完后没有SQL Server Management Studio的解决办法
- SQL Server 2005 开发版 安装问题 安装完成后没有SQL Server Management Studio
- SQL Server 2000/2005 常用sql查询整理
- 安装完SQL Server 2005 Express后安装SQL Server Management Studio Express提示:Setup is missing prerequisites:- MSXML6
- SQL Server 2000/2005 分页SQL — 单条SQL语句
- SQL Server Compact Edition 与SQL Server 2005数据同步之发布和订阅