[英]Convert multiple SQL columns in a row to JSON and update to a column in the same row
我正在尝试将一行中的多个列序列化为 JSON 并将其更新为同一行中的列:
UPDATE dbo.ItemSpecification
SET ItemCameraData = (SELECT CameraFocalLengthMin, CameraFocalLengthMax, CameraHousingType, CameraMountType, CameraResolutionHorizontal, CameraResolutionVertical, CameraType FROM dbo.ItemSpecification
WHERE Id = Id
FOR JSON AUTO)
select 语句忽略了“Where Id = Id”并尝试将整个表序列化为每一行,而不仅仅是它正在更新的单行中的列。
如何在 select 语句中指定仅序列化它正在更新的单行中的列而不是整个表?
更新:
这里是应用的答案。 Azure SQL想给FROM语句中的表起别名
UPDATE dbo.ItemSpecification
SET ItemCameraData = (SELECT CameraFocalLengthMin, CameraFocalLengthMax, CameraHousingType, CameraMountType, CameraResolutionHorizontal, CameraResolutionVertical, CameraType FROM dbo.ItemSpecification
WHERE Id = outer_stmt.Id
FOR JSON AUTO)
FROM dbo.ItemSpecification outer_stmt
你还没有提到你正在使用什么数据库,所以我的语法可能略有偏差,但概念应该匹配。
您的内心陈述不太可能知道您要使用Id = Id
做什么。 您需要引用外部表,否则您将获得1 = 1
的等价物。 由于这是同一张表,我为外部表设置了别名,因此可以在内部 select 语句中引用它。
UPDATE dbo.ItemSpecification as outer_stmt
SET ItemCameraData = (
SELECT
CameraFocalLengthMin, CameraFocalLengthMax, CameraHousingType
, CameraMountType, CameraResolutionHorizontal, CameraResolutionVertical
, CameraType
FROM dbo.ItemSpecification
WHERE
Id = outer_stmt.Id
FOR JSON AUTO
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.