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