我在表中有一列包含以下格式的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