運行MS SQL Server 2014 express。突然間,視圖中的一列變爲空,儘管是兩個不可空列的聯合。請幫我明白是怎麼回事:不可空列的聯合可爲空
與UNION:
我缺少什麼?
編輯更多的信息:當我重新保存IncomingTransactions視圖,其列現在變成零,但它不應該!以下是數量列的定義:(CASE PIN.StatusId WHEN 6 THEN PIN.QuantityReceived WHEN 7 THEN 0 ELSE PIN.QuantityRevised END)AS Quantity。每個數量字段都是非空的,case語句是詳盡無遺的。查詢的其餘部分是StatusId字段上的一個簡單聯接,它是一個非空FK,所以我仍然在這裏丟失。
編輯2:基於以下YB的建議,我創建了重現此行爲的最小的測試案例:
Create Table ybTest1 (Q1 decimal (7,2) not null, X int not null);
GO
Create View ybTestNSB As
Select (CASE X WHEN 0 THEN Q1 ELSE CAST(0 as decimal(7,2)) END) AS Q From ybTest1
GO
在ybTest1視圖Q欄爲空,即使case語句也是面面俱到。即使我將0在ELSE分支中與CAST(0 as decimal(7,2))
一起包裝,如YB所示,它仍然爲空。 CASE沒有我想到的語義,或者這是一個錯誤。
奇怪的部分是Status get'not null',可能取決於數據類型。你是如何創建視圖的?我推薦使用兩個測試表進行工作,所有數據類型都爲空且不爲空,並查看是否可以重現此行爲 –
您如何使用該視圖? WHERE子句?骨料?根據你的查詢,你有可能在一個表中有一個不存在於第二個表中的記錄,導致使用一個空值。 UNION進行排序併合並以消除重複。如果你想要所有的記錄,做一個聯盟所有如果你不關心重複,聯盟所有更快。 – JVC
@JuanCarlosOropeza,我猜Type,Id,PartTypeId和Status都是關鍵字段?數量,FiscalYearId,DateTransacted和Source不是。 – Clay