Преобразование нескольких столбцов SQL в строке в JSON и обновление до столбца в той же строке - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь сериализовать несколько столбцов в строке до JSON и обновить его до столбца в той же строке:

UPDATE  dbo.ItemSpecification
SET ItemCameraData = (SELECT CameraFocalLengthMin, CameraFocalLengthMax, CameraHousingType, CameraMountType, CameraResolutionHorizontal, CameraResolutionVertical, CameraType FROM dbo.ItemSpecification
WHERE Id = Id
FOR JSON AUTO)

Статус выбора игнорирует «Где Id = Id» и пытается сериализовать всю таблицу в каждую строку, а не только столбцы из одной обновляемой строки. вся таблица?

UPDATE:

вот она с примененным ответом. 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

1 Ответ

1 голос
/ 09 июля 2020

Вы не упомянули, какую базу данных вы используете, поэтому мой синтаксис может немного отличаться, но концепция должна совпадать.

Маловероятно, что ваш внутренний оператор знает, что вы пытаетесь сделать с Id = Id. Вам нужно сослаться на внешнюю таблицу, иначе вы получите эквивалент 1 = 1. Поскольку это та же таблица, я присвоил внешней таблице псевдоним, чтобы на нее можно было ссылаться во внутреннем операторе выбора.

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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...