1

我以前从未使用过 Case 并且不知道如何执行此操作,但是由于地址更改现在出现在不习惯的数据中,因此我们在进行批发更新时遇到了一些问题。我试图将它用作 if 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)

我尝试将其包装成一个案例语句,例如:

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 万条记录),它使用的资源目前完全不相关。

谢谢。

4

2 回答 2

2

假设我理解您的问题(即仅在字段为空白时更新defendants_ALL_Fixed字段),您可以按以下方式执行此操作(坚持大小写):tiffAddsdefendants_ALL_Fixed

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

一个更简单(或者更确切地说,更容易阅读)的选项是基于一个WHERE子句(每列一个更新语句)执行简单的更新语句:

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, ''))) = '' )

编辑 1:根据您的评论,这表明您可以更新 tiffAdd = ''? 的所有列 IE

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, ''))) = ''
于 2012-06-07T12:57:48.017 回答
0

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

于 2013-08-20T08:28:38.470 回答