資料欄位中有NULL值時,需要特別小心處理
否則查詢時,通常會被遺漏此筆資料
以下簡單透過下列T-SQL語法建立一個測試資料說明
CREATE TABLE [dbo].[myEmployees]( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](10) NOT NULL, [Title] [nvarchar](30) NULL, Sales INT NULL, ) insert into myEmployees values ('Nancy','Sales Representative',100), ('Andrew','Sales Manager',200), ('Janet','Sales Representative',300), ('Margaret','Sales Representative',400), ('Sandy',NULL,500)檢查一下建立的資料
select * from [dbo].[myEmployees]
使用下列語法建立資料
SELECT NAME+'/'+ Title from [myEmployees]查詢結果可發現第五筆資料應該要有內容但與NULL字串相加之後變成NULL了
使用下列語法再重新查一次
SET CONCAT_NULL_YIELDS_NULL OFF; SELECT NAME+'/'+ Title from [myEmployees]
其實資料庫預設連線屬性都是 SET CONCAT_NULL_YIELDS_NULL ON;
包含查詢工具SSMS的Advance 都是SET CONCAT_NULL_YIELDS_NULL ON
參考下圖:
因此,除非特別指定SET CONCAT_NULL_YIELDS_NULL ON ,否則透過t-sql處理都會有問題
建議欄位內容若為字串盡量不要存放null值,應改用空值才能避免此問題
事實上null值若用在where條件中做為比較值,也會比較麻煩
假設我需要列出所有Title非'Sales Manager'的員工資料
比較一下下列兩個查詢內容,結果都一樣只回傳三筆
SET CONCAT_NULL_YIELDS_NULL OFF; SELECT * FROM [dbo].[myEmployees] WHERE Title<>'Sales Manager' SET CONCAT_NULL_YIELDS_NULL ON; SELECT * FROM [dbo].[myEmployees] WHERE Title<>'Sales Manager'改用下列語法才能得到正確資料
SELECT * FROM [dbo].[myEmployees] WHERE Title<>'Sales Manager' OR Title IS NULL
全站熱搜
留言列表