Как выбрать строки из одной таблицы для каждой строки другой таблицы и проанализировать их в JSON

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть две таблицы DbContours и SimpleLines. Одна строка в DbContours имеет несколько соответствующих строк в SimpleLines через поле contourrid в таблице SimpleLines. Я хочу получить все строки в SimpleLines, связанные со строкой в DbContours, и проанализировать их как строку JSON, а затем вставить в какое-либо другое поле таблицы. Я могу сделать это для конкретного контура (в данном случае CDCBC42E-2E86-426E-A9BA-00B8B902A153). Как это сделать для всех строк в DbContours?

 DECLARE @Lines NVARCHAR(MAX) = (SELECT [X1]
          ,[Y1]
          ,[X2]
          ,[Y2]
FROM [DDROPDATABASEPROM-2020-10-11-13-13].[dbo].[SimpleLines] WHERE ContourId = 'CDCBC42E-2E86-426E-A9BA-00B8B902A153' FOR JSON AUTO);zDECLARE @OriginalJSON NVARCHAR(4000), @newjson VARCHAR(100);
SET @OriginalJSON = '{"CalculationProvider":"CalculateWithCSharp"}';
SELECT JSON_MODIFY(@OriginalJSON, '$.SimpleLines', JSON_QUERY(@Lines)) AS 'Updated JSON';
  

Ответ №1:

Начните с выделения необходимых задач. Первое, что вам нужно сделать, это разобраться с вашим запросом. Поскольку вы говорите, что таблицы связаны, вы должны использовать a JOIN , чтобы получить все строки, соответствующие вашим критериям.

Заставьте это работать в вашем запросе, затем вы можете запустить его через нужные вам функции JSON.

Наконец, если вы хотите вставить их в новую таблицу, вы можете использовать форму CTAS — Create Table As Select или с CTE Common Table Expression .