最近剛好發生跟 MS SQL 有關的狀況,所以就記錄一下
1. where 字串欄位要不要加 N'' (unicode)
範例: Select * from OrderDetail where OrderDetailId= N'20220923084533'
基本上,欄位是 char、varchar 就不需要。nvarchar nchar 就要加 N
這好像是廢話,但往往寫程式會沒注意,甚至是會覺得通通加 N 比較沒問題
但如果欄位牽涉到 index 就會影響搜尋 ,所以寫程式當下要注意
-- 假設 OrderDetailId 是 varchar(20)
-- OrderDetail 有千萬筆資料
Select * from OrderDetail where OrderDetailId= N'20220923084533'
-- 結果跑超級久 (未使用 PK 找,掃整個 table)
Select * from OrderDetail where OrderDetailId= '20220923084533'
-- 結果一下就出來 (使用 PK 找)
-- **資料庫設計最好以數值來當 key 比較好
2. 當欄位有 null 值,where [clumnName] not in ('A') 也會排除 null 的狀況
直覺上,只要下 not in (..) 那會其他項目都會抓出,但是實際上,該欄位是 null的資料也會被排除
因為資料庫一旦你對某欄位下條件,他就會排除 null 的欄位,除非你指定 [clumnName] is null 才會有資料