SQL 服务器:使用 JSON 输入更新 table 与连接条件
SQL Server : update table with join condition using JSON input
我有一个包含 position_id
和 column_id
列的 table。我从 API 调用中收到 JSON 响应,我想使用 position_id
使用 JSON 响应中的值更新我的 table。
这是一个例子
JSON Table:
Table 在数据库中(我称之为 #updateTable
):
我想使用 JSON 输入更新我的 #updateTable
,如下所示:
我怎样才能做到这一点?是否可以不循环 table。我认为基于集合的操作会更好。
(对于 position_id
,JSON table 和 #updateTable
中的行数相等。
这是我在示例中使用的 table 创建代码。
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
感谢您的帮助。
更新:
我使用这个连接来更新 table :
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
此查询有效。
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
我有一个包含 position_id
和 column_id
列的 table。我从 API 调用中收到 JSON 响应,我想使用 position_id
使用 JSON 响应中的值更新我的 table。
这是一个例子
JSON Table:
Table 在数据库中(我称之为 #updateTable
):
我想使用 JSON 输入更新我的 #updateTable
,如下所示:
我怎样才能做到这一点?是否可以不循环 table。我认为基于集合的操作会更好。
(对于 position_id
,JSON table 和 #updateTable
中的行数相等。
这是我在示例中使用的 table 创建代码。
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
感谢您的帮助。
更新:
我使用这个连接来更新 table :
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
此查询有效。
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