在 SQL 中使用 JSON 更新表

Har*_*a W 5 sql t-sql sql-server json

有没有办法使用 SQL 中的 JSON 字段更新表。

{
    "RelationshipType" : [ 
        {
            "ID" : 1,
            "FromID" : 70,
            "ToID" : 12
        },
        {
            "ID" : 3,
            "FromID" : 80,
            "ToID" : 1
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

表结构

ID    |    FromID    |    ToID    |
1     |     10       |     12     |
2     |     42       |     17     |
3     |    100       |     1      |
Run Code Online (Sandbox Code Playgroud)

如果我在 SQL 服务器中使用上面提到的 JSON 文件更新表,输出应该通过匹配FromIDID.

ID    |    FromID    |    ToID    |
1     |     70       |     12     |
2     |     42       |     17     |
3     |     80       |     1      |
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我目前正在使用以下查询。

DECLARE @Relationship AS TABLE(FromID INT,ToID INT,ID INT)
INSERT INTO @Relationship (FromID,ToID,ID)
SELECT FromID, ToID, ID
FROM OPENJSON(@RelationshipType)
WITH (FromID INT, ToID INT, ID INT)
Run Code Online (Sandbox Code Playgroud)

我正在迭代表@Relationship并更新数据。是否有一种正确的方法可以使用 JSON 操作而不迭代临时表。

Pet*_*r B 5

首先,你需要指定的路径'$.RelationshipType'OPENJSON(),使其正确地提取数据。

其次,可以OPENJSON()像任何表一样连接结果,也可以使用UPDATE,如下所示:

UPDATE U
SET    FromID = J.FromID
FROM   YourTable AS U
JOIN   OPENJSON(@RelationshipType, '$.RelationshipType')
       WITH (ID INT, FromID INT, ToID INT) J
       ON J.ID = U.ID
Run Code Online (Sandbox Code Playgroud)

看看它在行动:https :
//dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=c37ef5a175c0f19e0f990dc6a219ce26