Sql server 奇怪的更新行为
在我的数据仓库存储过程的一部分中,我有一个将旧项目数据与新项目数据(旧数据在表中,新数据在临时表中)进行比较并更新旧数据的过程 奇怪的是,如果旧数据为null,那么update语句就不起作用。如果我添加一条isnull语句,那么更新工作正常。我的问题是,这为什么不像我想象的那样有效 多个update语句之一:Sql server 奇怪的更新行为,sql-server,sql-server-2005,data-warehouse,Sql Server,Sql Server 2005,Data Warehouse,在我的数据仓库存储过程的一部分中,我有一个将旧项目数据与新项目数据(旧数据在表中,新数据在临时表中)进行比较并更新旧数据的过程 奇怪的是,如果旧数据为null,那么update语句就不起作用。如果我添加一条isnull语句,那么更新工作正常。我的问题是,这为什么不像我想象的那样有效 多个update语句之一: update cube.Projects set prServiceLine=a.ServiceLine from @projects1 a inner join cube.Pro
update cube.Projects
set prServiceLine=a.ServiceLine
from @projects1 a
inner join cube.Projects
on a.WPROJ_ID=cube.Projects.pk_prID
where prServiceLine<>a.ServiceLine
更新多维数据集项目
设置prServiceLine=a.ServiceLine
来自@projects1a
内部联接多维数据集项目
在a.WPROJ_ID=cube.Projects.pk_prID上
哪里有prServiceLinea.ServiceLine
也许您需要左连接(或右连接,具体取决于数据),而不是内部连接
where prServiceLine<>a.ServiceLine
你永远不会看到“作品”,“作品!”,““还没有”,或者“还没有!”获取输出。只有可能(“可能!”,如果两者相等的话)
不能使用!=,=,测试空值,或者,您需要使用ISNULL()、COALESCE、IS NOT NULL或IS NULL,如果您正在测试的某个值可以为NULL。维基百科关于的文章实际上非常好-它解释了该行为通常不是您期望的,在许多情况下返回“未知”而不是真或假 如果你引入空值,会有很多陷阱
declare @x int, @y int
if @x<>@y print 'works'
if @x=@y print 'works!'
set @x=1
if @x<>@y print 'not yet'
if @x=@y print 'not yet!'
set @y=2
if @x<>@y print 'maybe'
if @x=@y print 'maybe!'
maybe