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”就成功了。由于某些原因,使用“中的位置”材质(选择…)导致了该问题。谢谢你,亚伦。