将一列 JSON 字符串迁移到仅包含查询的 SQL 表



我在表中有一列包含以下格式的JSON字符串。

单击此处查看 JSON 列的图像

{"uuid":"633ba45145f58a40","model":"HM NOTE 1LTE","平台":"Android","版本":"4.4.4","前置摄像头可用":"true"}

现在我想将此数据迁移到具有以下架构的表中

CREATE TABLE OfflineAppDeviceInfo (
  id INT PRIMARY KEY NOT NULL,
  deviceId INT NOT NULL,
  uuid VARCHAR(255),
  model VARCHAR(65),
  platform VARCHAR(65),
  version VARCHAR(65),
  frontCameraAvailable BIT,
  FOREIGN KEY (deviceId) REFERENCES DeviceSecurity (deviceId)
);

单击此处查看离线应用程序设备信息表

现在我已经有一个解析 JSON 的 SQL 脚本

select d.deviceID,NAME,StringValue
from DeviceSecurity d
cross apply udf_parseJSON_support(d.deviceInfoJson)
where name != '-'
and d.deviceInfoJson is not null

单击此处查看上述脚本运行的结果

但是如何仅使用SQL脚本将其迁移到OfflineAppDeviceInfo表中。我知道这可以用 JAVA 代码来完成,但我有一个要求,那就是只能用 SQL 来完成。这可能吗?

尝试做这样的事情。准备有效查询时,可以使用 INSERT INTO 语句将数据复制到正确的表中。

    DECLARE @json NVARCHAR(MAX)
    SET @json =  
    N'[  
           { "id" : 2,"info": { "name": "John", "surname": "Smith" }, "age": 25 },  
           { "id" : 5,"info": { "name": "Jane", "surname": "Smith" }, "dob": "2005-11-04T12:00:00" }  
     ]'  
    SELECT *  
    FROM OPENJSON(@json)  
      WITH (id int 'strict $.id',  
            firstName nvarchar(50) '$.info.name', lastName nvarchar(50) '$.info.surname',  
            age int, dateOfBirth datetime2 '$.dob')

示例来自 https://learn.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server

最新更新