Win2k3 + SQL 2k DE 8.00.2282(SP4),补丁齐,突然出现一个奇怪的问题。
有个视图,很简单,对表TableA、表TableB进行关联查询:
TableA(
UserID int,
UserName
)
TableB(
UserID int,
IsCheck char(1) NOT NULL defualt 'N'
)
TableA中的UserID记录多于TableB中的UserID记录。
视图语句为:
Create View View_test
AS
select A.*, isnull(B.IsCheck,'X') as IsCheck from TableA as A left outer join TableB as B on a.UserID =b.UserID
select * from View_test
UserID | UserName | IsCheck |
1 | user1 | Y |
2 | user2 | X |
一直执行都正常,这个视图返回的IsCheck不会为空。但是,突然昨天某个时间开始,这个视图返回的IsCheck会为空了,用如下语句可以明确看出来差别
select *, isnull(IsCheck,'X') as IsCheck2 from View_test
UserID | UserName | IsCheck | IsCheck2 |
1 | user1 | Y | Y |
2 | user2 | Null | X |
IsCheck有为空(Null)的,而IsCheck2就能正常将Null转为'X'
但是之前都不会有这种情况,因为写成 isnull(B.IsCheck.'X') as IsCheck就是为了防止这种情况出现
从企业管理器里看这个View_test的代码、从查询分析器里获取这个View_test的代码都正常,无赖之下,只好再次重建了视图,但是实际上没有改变视图的创建命令。马上就一切都正常了,很是奇怪~~~~
是Isnull还是view有什么禁忌么?
是不是 B.IsCheck 和IsCheck 有奇异的问题