我有一个包含列position_id
和column_id
的表。我从API调用中获取JSON响应,并且我想使用position_id
使用JSON响应中的值更新表。
这是一个例子
JSON表:
数据库中的表(我称它为#updateTable
):
我想使用如下所示的JSON输入来更新#updateTable
:
我该如何实现?是否有可能不遍历表。我认为基于集合的操作会更好。
(JSON表中的行数与#updateTable
中的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
答案 0 :(得分:0)
此查询有效。
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