Tsql datetime不为空的更新-导致空值

Tsql datetime不为空的更新-导致空值,tsql,sql-server-2008-r2,sql-update,Tsql,Sql Server 2008 R2,Sql Update,我用下面的语句创建了一个存储过程 Create table #pokedex ( tier int, idNo int, name varchar(50), lastbattle datetime ); insert into #pokedex (idNO, name, lastbattle) (select A.idNO, A.name, B.lastbattle from differenttable A -- this table has data pulled from

我用下面的语句创建了一个存储过程

Create table #pokedex
( tier int,
  idNo int,
  name varchar(50),
  lastbattle datetime );

insert into #pokedex (idNO, name, lastbattle) 
(select A.idNO, A.name, B.lastbattle 
from differenttable A -- this table has data pulled from SAP
inner join alternatetable B -- this table has values inserted from SQLBULKCOPY
on A.idNo = B.idNo) 

update #pokedex set tier = 3;

update #pokedex 
set tier = 2
where idNO in (
select idNO from anothertable)
and tier = 3

Update #pokedex
Set tier = 1
where idNo in (
select idNo from #pokedex where lastbattle is not null 
and tier = 2);

select * from #pokedex
order by tier, lastbattle;
结果

tier    idNO    name    lastbattle
1       001     pidg    null
1       002     ratt    2014-08-22 12:00
1       003     pika    2014-08-22 12:00
2       004     star    null
2       005     muk     null
2       004     mew     null
我的问题:当我的更新条件为lastbattle not null时,为什么第一行有一个
tier=1

Side info:insert语句获取由
SQLBULKCOPY
命令填充的数据,用户在该命令中上载了一个大型excel文件

请原谅我喜欢用口袋妖怪来代替虚拟数据

SOLVED - REPLACED UPDATE STATEMENT WITH
UPDATE #pokedex
SET TIER = 1
WHERE LASTBATTLE IS NOT NULL
AND TIER = 2;

您需要向任何人显示插入,以便他们能够了解更新过程中发生了什么(以及这与应该发生的情况是否不同)。尽管如此,为什么要
在()中更新where
而不是只
在lastbattle不为null的地方更新
idNo
是唯一的,是吗?我应该包括更多信息。由于我的层条件,update语句有一个附加条件。第3层=无条件,第2层=条件A。第1层=条件A和B。我还尝试了“where lastball null”-结果没有第1层结果。“where lastbattle”“”--没有区别,因为lastbattle是一个日期时间数据类型。它似乎改变了我的select语句以更新“where lastbattle不为null”就成功了。由于某些原因,使用“中的位置”材质(选择…)导致了该问题。谢谢你,亚伦。