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語句:
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函式
得到的結果集如下:
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中查詢出來的資料是什麼?
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的寫法:
FROM TestIsNull
這樣通過查詢出來的結果集就和SQL Server 2000(或SQL Server 2005)查詢出來的結果集一樣了。
下面簡單介紹一下關於COALESCE函式的用法:
COALESCE 返回其引數中第一個非空表示式。
語法:COALESCE (expression [,...n])
引數:expression:任何型別的表示式。n:表示可以指定多個表示式的佔位符。所有表示式必須是相同型別。或者可以隱式轉換成相同的型別。
返回值:將相同的值作為expression返回。
註釋:如果所有自變數均為NULL,則COLALESCE返回NULL值。COALESCE(expression,...n)與此CASE函式等價:
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-628260/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql Server 2005函式SQLServer函式
- SQL Server 2005和SQL Server 2000資料的相互匯入SQLServer
- 不同網段sql server 2005 連線 sql server 2000的問題SQLServer
- SQL Azure與SQL Server的異同點總結和歸納SQLServer
- SQL Server 2005中修改 Server Collation的方法SQLServer
- sql server 2005中的分割槽函式用法(partition by 欄位)SQLServer函式
- SQL Server 2005中的UDF(使用者定義函式)SQLServer函式
- SQL-Server中datepart函式的使用SQLServer函式
- sql server 2005的一些動態函式SQLServer函式
- 《轉》Sql Server 2005(64位) 連線Sql Server 2000(32位) .SQLServer
- Sql Server 日期函式SQLServer函式
- SQL SERVER 字串函式SQLServer字串函式
- 一個SQL Server中的FormatDatetime函式SQLServerORM函式
- SQL Server 裡的日期和時間函式SQLServer函式
- 在全文索引中同義詞的使用(SQL SERVER 2005)索引SQLServer
- SQL SERVER 時間和日期函式SQLServer函式
- Sql server 2005遷移至Oracle系列之三:在Oracle中建立sql中的常見函式SQLServerOracle函式
- SQL Server 2000與2005歸納SQLServer
- SQL Server中的未文件化的dbcc命令(適用於SQL Server 2000)SQLServer
- 初探SQL Server CE + Codesmith用法SQLServerMIT
- SQL Server常用函式整理SQLServer函式
- Sql Server系列:字串函式SQLServer字串函式
- Sql Server系列:聚合函式SQLServer函式
- Sql Server系列:排序函式SQLServer排序函式
- Sql server 分割符函式SQLServer函式
- SQL SERVER 數學函式SQLServer函式
- SQL SERVER 系統函式SQLServer函式
- SQL SERVER 自定義函式SQLServer函式
- SQL Server函式總結SQLServer函式
- SQL Server CONVERT() 函式SQLServer函式
- SQL Server 2005中的檔案和檔案組SQLServer
- 在安裝有sql server2000的基礎上裝sql server 2005遇到的問題SQLServer
- Sql Server系列:日期和時間函式SQLServer函式
- Microsoft SQL Server 2005 中的國際功能ROSSQLServer
- 【TomYu 】SQL Server 2005異地備份SQLServer
- SQL Server中row_number函式的常見用法SQLServer函式
- SQL SERVER中的頁和區SQLServer
- SQL Server 2005 中的分割槽表和索引應用SQLServer索引