首页 新闻 会员 周边

用了isnull还是返回了null

0
悬赏园豆:10 [已关闭问题] 关闭于 2009-08-26 12:35

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有什么禁忌么?

问题补充: 已经找到答案, http://www.cnblogs.com/rijing2004/archive/2007/07/25/sqlview.html 是因为*星号代表的字段信息不会直接更新到视图里,而刚好昨天有其他人更改了TableA,加了字段,所以就相当于把Ischeck弄到后面去了。
不能飚车的主页 不能飚车 | 菜鸟二级 | 园豆:453
提问于:2009-08-26 11:43
< >
分享
所有回答(1)
0

是不是 B.IsCheck 和IsCheck 有奇异的问题

Mr雨 | 园豆:1199 (小虾三级) | 2009-08-26 11:48
isnull(B.IsCheck,'X') as IsCheck 感觉是这个没起作用,原来担心是否有重名的问题,但是view的语句里专门写了只返回A.*,没有返回其他B表的字段,而A表中没有IsCheck这个字段。
支持(0) 反对(0) 不能飚车 | 园豆:453 (菜鸟二级) | 2009-08-26 11:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册