SQL Server: обновить таблицу с условием соединения, используя ввод JSON - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть таблица со столбцами position_id и column_id.Я получаю ответ JSON от вызова API и хочу обновить свою таблицу, используя значение из ответа JSON, используя position_id.

Вот пример

Таблица JSON:

enter image description here

Таблица в базе данных (Я называю это #updateTable):

enter image description here

Я хочу обновить #updateTable, используя вход JSON, как показано ниже:

enter image description here

Как мне этого добиться?Это возможно без перебора таблицы.Я полагаю, что операция на основе набора будет лучше

(В таблице JSON одинаковое количество строк и position_id * *).

Вот код для создания таблицы, который я использовал в своем примере.

DROP TABLE IF EXISTS #inputJSONTable
DROP TABLE IF EXISTS #updateTable

DECLARE @inputJSON  nvarchar(max) =
    '[  
       {  
          "column_id":"7",
          "position_id":"787",
          "column1":"GoodValue",
          "column2":"ReplacedValue"
       },
       {  
          "column_id":"8",
          "position_id":"787",
          "column1":"ReplacedValue",
          "column2":"GoodValue"
       }
    ]'

DECLARE @inJSON NVARCHAR(MAX);
SET @inJSON = RTRIM(LTRIM(@inputJSON));

SELECT
    *
INTO 
    #inputJSONTable
FROM 
    OPENJSON(@inJSON)
    WITH (
             [column_id] VARCHAR(50) '$.column_id',
             [position_id] VARCHAR(50) '$.position_id',
             [column1] VARCHAR(50) '$.column1',
             [column2] VARCHAR(50) '$.column2'
         );

-- SELECT * FROM #inputJSONTable

CREATE TABLE #updateTable
(
      Id INT IDENTITY(1, 1) PRIMARY KEY,
      column_id INT, 
      position_id INT, 
      column1 VARCHAR(50), 
      column2 VARCHAR(50)
)

INSERT INTO #updateTable
VALUES (7, 787, 'GoodValue', 'ReplaceME'),
       (8 , 787,  'ReplaceME', 'GoodValue')

SELECT * FROM #inputJSONTable
SELECT * FROM #updateTable

Спасибо за помощь.

ОБНОВЛЕНИЕ:

Я использовал это объединение для обновления таблицы:

UPDATE up
SET up.column1 = ip.column1,
    up.column2 = ip.column2
FROM #updateTable up 
INNER JOIN #inputJSONTable ip ON up.column_id = ip.column_id

1 Ответ

0 голосов
/ 21 февраля 2019

Этот запрос сработал.

UPDATE up
SET up.column1 = ip.column1,
    up.column2 = ip.column2
FROM #updateTable up 
INNER JOIN #inputJSONTable ip ON up.column_id = ip.column_id
...