我有一个带有列position_id
和的表column_id
。我从 API 调用中获得 JSON 响应,我想使用 JSON 响应中的值更新我的表,使用position_id
.
这是一个例子
JSON表:
数据库中的表(我称之为#updateTable
):
我想#updateTable
使用如下 JSON 输入更新我的:
我怎样才能做到这一点?是否可以不循环遍历表。我认为基于集合的操作会更好。
#updateTable
(JSON 表和a中的行数相等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