Tsql 一次更新多个列的情况

Tsql 一次更新多个列的情况,tsql,sql-update,case,Tsql,Sql Update,Case,我以前从未使用过Case,也不确定如何进行此操作,但我们在进行大规模更新时遇到了一些问题,因为现在数据中的地址发生了变化,而这些数据过去不曾使用过。我试图用它作为if-then语句,但我确信我做错了。当字段为空或null时,我需要更新地址 UPDATE defendants_ALL_Fixed SET tiffAdd = tiffAdds.Add1, tiffZip = tiffAdds.Zip, tiffCity = tiffAdds.City, tiffSta

我以前从未使用过Case,也不确定如何进行此操作,但我们在进行大规模更新时遇到了一些问题,因为现在数据中的地址发生了变化,而这些数据过去不曾使用过。我试图用它作为if-then语句,但我确信我做错了。当字段为空或null时,我需要更新地址

UPDATE    defendants_ALL_Fixed
SET              tiffAdd = tiffAdds.Add1, tiffZip = tiffAdds.Zip, tiffCity = tiffAdds.City, tiffState = tiffAdds.State
FROM         defendants_ALL_Fixed INNER JOIN
                      tiffAdds ON defendants_ALL_Fixed.tiff = tiffAdds.Tiff
WHERE     (defendants_ALL_Fixed.tiff = tiffAdds.Tiff)
我已尝试将其包装到案例陈述中,例如:

SELECT
  a.tiffAdd
, CASE WHEN a.tiffAdd = '' THEN

UPDATE    defendants_ALL_Fixed
SET              tiffAdd = tiffAdds.Add1, tiffZip = tiffAdds.Zip, tiffCity = tiffAdds.City, tiffState = tiffAdds.State
FROM         defendants_ALL_Fixed INNER JOIN
                      tiffAdds ON defendants_ALL_Fixed.tiff = tiffAdds.Tiff
WHERE     (defendants_ALL_Fixed.tiff = tiffAdds.Tiff)

END
FROM defendants_ALL_Fixed a
这不起作用,我理解为什么它不起作用,但不知道从这里去哪里,任何帮助都将是巨大的。我们每个月只使用它更新一次数据(大约150万条记录),它使用的资源在这一点上根本不相关


谢谢。

假设我理解您的问题(即,当
被告人所有人固定的
字段为空时,仅使用
tiffAdds
更新
被告人所有人固定的
字段),您可以如下操作(坚持案例):

一个更简单(或者更容易阅读)的选项是基于
WHERE
子句(每列一条update语句)执行简单的update语句:

编辑1:根据您的评论,建议您只需更新tiffAdd=''的所有列即可?i、 e


你为什么不改用合并呢?对每个字段使用merge,检查值是否为null或空。我认为它应该是最好的(在我自己的解决方案中使用)。

它只需要在tiffAdd为null或空时更新,这就是为什么我试图将它包装起来,而不是为每一行编写一个case语句,但我只是将每一行更改为tiffAdd。谢谢大家!@korrowan请参阅我答案中的编辑1,如果您只想更新where tiffAdd='',甚至不需要使用用例,只需在更新语句中添加一个where子句。省略where(被告\u ALL\u Fixed.tiff=tiffAdds.tiff)的含义是什么?这是因为内部联接而不需要的吗?您不需要在
where
子句中使用
被告\u ALL_Fixed.tiff=tiffAdds.tiff
,因为您已经在联接的
ON
子句中指定了这一点,所以您只在旧的非ANSI样式联接的联接中使用了
where
子句!我最初试图用where条款来做这件事,并假设被告都是固定的。tiff=tiffAdds。tiff把事情搞砸了,但我不知道我不需要它。非常感谢!
UPDATE  defendants_ALL_Fixed
SET     tiffAdd = CASE WHEN LTRIM(RTRIM(ISNULL(tiffAdd, ''))) = '' THEN tiffAdds.Add1
                       ELSE tiffAdd
                  END ,
        tiffZip = CASE WHEN LTRIM(RTRIM(ISNULL(tiffZip, ''))) = '' THEN tiffAdds.Zip
                       ELSE tiffZip
                  END ,
        tiffCity = CASE WHEN LTRIM(RTRIM(ISNULL(tiffCity, ''))) = '' THEN tiffAdds.City
                        ELSE tiffCity
                   END ,
        tiffState = CASE WHEN LTRIM(RTRIM(ISNULL(tiffState, ''))) = '' THEN tiffAdds.State
                         ELSE tiffState
                    END
FROM    defendants_ALL_Fixed
        INNER JOIN tiffAdds ON defendants_ALL_Fixed.tiff = tiffAdds.Tiff
UPDATE  defendants_ALL_Fixed
SET     tiffAdd = tiffAdds.Add1
FROM    defendants_ALL_Fixed
        INNER JOIN tiffAdds ON defendants_ALL_Fixed.tiff = tiffAdds.Tiff
WHERE   ( LTRIM(RTRIM(ISNULL(tiffAdd, ''))) = '' )
UPDATE  defendants_ALL_Fixed
SET     tiffAdd = tiffAdds.Add1 ,
        tiffZip = tiffAdds.Zip ,
        tiffCity = tiffAdds.City ,
        tiffState = tiffAdds.State
FROM    defendants_ALL_Fixed
        INNER JOIN tiffAdds ON defendants_ALL_Fixed.tiff = tiffAdds.Tiff
WHERE   LTRIM(RTRIM(ISNULL(tiffAdd, ''))) = ''