SQL Server:使用JSON输入使用联接条件更新表

时间:2019-02-19 19:49:29

标签: sql sql-server sql-server-2016 sql-server-json

我有一个包含列position_idcolumn_id的表。我从API调用中获取JSON响应,并且我想使用position_id使用JSON响应中的值更新表。

这是一个例子

JSON表:

enter image description here

数据库中的表(我称它为#updateTable):

enter image description here

我想使用如下所示的JSON输入来更新#updateTable

enter image description here

我该如何实现?是否有可能不遍历表。我认为基于集合的操作会更好。

(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

1 个答案:

答案 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