SQL:当数据库中的值为空时更新值

时间:2018-10-23 05:21:44

标签: sql sql-server

我知道这已经是一个问题了,可能很接近。 但是我真的想要一个答案,我已经在互联网上搜索,阅读文档,博客以及对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)

任何想法都会有很大帮助。

3 个答案:

答案 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值)