繁体   English   中英

将一行中的多个 SQL 列转换为 JSON 并更新为同一行中的列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM