select
* from table
where
col.exist
('*'
) =
0假設我們有乙個簡單的表,包括兩列,一列為id identity型,一列為col xml資料型別,裡面的資料如下:
id col
1
2 --col列為空
3 test
4
我們要查詢其中col為空的資料,一般的做法如下:
select
* from table
where
convert
(varchar
(max
),col
) =
''
但實際上,我們不需要對這個列進行轉換,利用xquery一樣可以達到目的,實現如下:
select
* from table
where
col.exist
('*'
) =
0對於這兩種寫法,其效率如何呢,經過我的測試,建立了乙個測試表,結構如此表,我分別利用了adventuresworks的兩個表
的xml列資料,構造了10萬級的資料做為測試:
--adventureworks.person.contact
sql server execution times:
cpu time = 110 ms, elapsed time = 213 ms.
sql server execution times:
cpu time = 93 ms, elapsed time = 110 ms.
----sales.individual
sql server execution times:
cpu time = 6516 ms, elapsed time = 7023 ms.
sql server execution times:
cpu time = 1172 ms, elapsed time = 3438 ms.
測試過程中,其實發現io是相等,而執行時間上,使用xquery的方法稍微要比列轉換的方法快一些,由於person.contact
的xml列資料報含了太多的null值,因此,會看到時間上有比較大的差異,相信百萬級的資料,應該更能體現差別,感興趣
的朋友可以自己去測試.
查詢EXCEL資料時,列資料為空的問題
在查詢excel資料時,如果某一列的值有數字有文字,那最後我們使用查詢語句獲取的資料裡就有可能讀取不到某些文字值.這個原因我想在網上找找有一大段的.其實要解決這個問題也很簡單,只要在連線字串中指示所有列都按文本來處理,這樣就可以獲取到所有的資料了.oledbconnection objconn ne...
查詢EXCEL資料時,列資料為空的問題
在查詢excel資料時,如果某一列的值有數字有文字,那最後我們使用查詢語句獲取的資料裡就有可能讀取不到某些文字值.這個原因我想在網上找找有一大段的.其實要解決這個問題也很簡單,只要在連線字串中指示所有列都按文本來處理,這樣就可以獲取到所有的資料了.oledbconnection objconn ne...
查詢EXCEL資料時,列資料為空的問題
在查詢excel資料時,如果某一列的值有數字有文字,那最後我們使用查詢語句獲取的資料裡就有可能讀取不到某些文字值.這個原因我想在網上找找有一大段的.其實要解決這個問題也很簡單,只要在連線字串中指示所有列都按文本來處理,這樣就可以獲取到所有的資料了.oledbconnection objconn ne...