如何解决在SQL中将列迁移到JSON
我有一个看起来像这样的表(表A):
Id (int)
Quantity (int)
Clicks (int?)
Opens (int?)
VendorName (string)
我想将其转换为这样的表(表B)
Id (int)
JsonData (Json that has the 4 fields above)
如何将json列插入/转换?还是我只需要自己构造json字符串?
此外,int
列的可空性会影响创建吗?例如,是否不包括clicks
或它们执行类似{"clicks": null }
的操作?
我通读了Microsoft's documentation关于JSON的内容,但没有看到有关从SQL列进行插入的任何参考。仅来自其他JSON数据。
解决方法
您只需要FOR JSON PATH
和WITHOUT_ARRAY_WRAPPER
和INCLUDE_NULL_VALUES
选项:
表格:
CREATE TABLE TableA (
Id int,Quantity int,Clicks int,Opens int,VendorName varchar(100)
)
INSERT INTO TableA (Id,Quantity,Clicks,Opens,VendorName)
VALUES
(1,100,'Vendor1'),(2,200,NULL,'Vendor2')
声明:
SELECT
Id,(
SELECT Quantity,VendorName
FOR JSON PATH,WITHOUT_ARRAY_WRAPPER,INCLUDE_NULL_VALUES
) AS JsonData
-- INTO TableB
FROM TableA
结果:
Id JsonData
1 {"Quantity":100,"Clicks":100,"Opens":100,"VendorName":"Vendor1"}
2 {"Quantity":200,"Clicks":null,"Opens":200,"VendorName":"Vendor2"}
,
类似这样的东西
drop table if exists #TableB;
create table #TableB(
Id int unique not null,JsonData nvarchar(max) not null);
go
insert #TableB(Id,JsonData)
select t.Id,(select ta.Quantity,ta.Clicks,ta.Opens,ta.VendorName
from #TableA ta
where t.Id=ta.Id
for json path,root('JsonArray'))
from #TableA t
group by t.Id;
select tb.Id,oj.Quantity,oj.clicks,oj.Opens,oj.VendorName
from #TableB tb
cross apply openjson(tb.JsonData,'$.JsonArray') with (Quantity int,Clicks int,Opens int,VendorName varchar(200)) oj;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。