运行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