Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 奇怪的更新行为_Sql Server_Sql Server 2005_Data Warehouse - Fatal编程技术网

Sql server 奇怪的更新行为

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

在我的数据仓库存储过程的一部分中,我有一个将旧项目数据与新项目数据(旧数据在表中,新数据在临时表中)进行比较并更新旧数据的过程

奇怪的是,如果旧数据为null,那么update语句就不起作用。如果我添加一条isnull语句,那么更新工作正常。我的问题是,这为什么不像我想象的那样有效

多个update语句之一:

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