我知道这已经是一个问题了,可能很接近。 但是我真的想要一个答案,我已经在互联网上搜索,阅读文档,博客以及对SO的提问。
到目前为止,这是我的查询
declare @count numeric
select @count = (select count(1) from E496_TitleReference a where
exists (select 1 from #tempTransactions b where a.EPEB_RoD = b.tEPEB_RoD and
a.EPEB_ENO = b.tEPEB_ENO and a.EPEB_ID = b.tEPEB_ID and a.Title_Seq = b.tTitle_Seq))
update E496_TitleReference
set PrintStatus = '{0}',Is_AESM=isnull(-1,Is_AESM)
from E496_TitleReference a where
exists (select 1 from #tempTransactions b where a.EPEB_RoD = b.tEPEB_RoD and
a.EPEB_ENO = b.tEPEB_ENO and a.EPEB_ID = b.tEPEB_ID and a.Title_Seq = b.tTitle_Seq)
if @@rowcount <> @count
begin
rollback tran
Print "Error: There is an error on table E496_TitleReference."
return
end
go
例如,在我Database
的表中,我有列名Is_AESM
,在Is_AESM
列中,它有4个值。
Is_AESM
NULL
NULL
-1
-2
类似这样的事情。 现在,当我运行脚本时,运行它就没问题了,
Is_AESM=isnull(-1,Is_AESM)
在此查询中,它将检测Is_AESM
是否为null
,如果不保留,则将更新Is_AESM
= -1
。
现在我的问题是,如果我的查询检测到Is_AESM
具有一个null
值,它将把所有值更新为-1
。
Is_AESM
-1
-1
-1
-1
结果是这样的。现在我想要的是仅更新空值,而不更新列Is_AESM
中的所有值。
我认为此查询是错误的Is_AESM=isnull(-1,Is_AESM)
。
任何想法都会有很大帮助。
答案 0 :(得分:2)
您可以尝试使用Coalsece()函数
update E496_TitleReference
set PrintStatus = '{0}',Is_AESM=coalsece(Is_AESM,-1)
from E496_TitleReference a where
exists (select 1 from #tempTransactions b where a.EPEB_RoD = b.tEPEB_RoD and
a.EPEB_ENO = b.tEPEB_ENO and a.EPEB_ID = b.tEPEB_ID and a.Title_Seq = b.tTitle_Seq)
答案 1 :(得分:1)
您需要替换参数顺序。
Is_AESM=isnull(Is_AESM, -1)
答案 2 :(得分:0)
您可以使用COALSECE功能。它从给定列表返回第一个非空条目。所以:
Is_AESM= COALSECE(IS_AESM,-1)
如果 IS_AESM 值不为null(因为它是第一个非null值),它将返回
否则,如果 IS_AESM 为NULL,则返回 -1 (因为它是非null值)