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

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

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

Как мне этого добиться?Это возможно без перебора таблицы.Я полагаю, что операция на основе набора будет лучше
(В таблице 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