无法在包含 NULL 值的 SQL 表中创建 JSON 格式的列

Posted

技术标签:

【中文标题】无法在包含 NULL 值的 SQL 表中创建 JSON 格式的列【英文标题】:Could not create the JSON-formatted Column in SQL Table with including NULL Values 【发布时间】:2020-10-19 19:56:08 【问题描述】:

我需要将 SQL 数据与列合并到一个表中,格式为 JSON。 Json 列的长度不同,从 4 列到 5 列。因此,当长度为 4 时,我需要在 JSON 字符串中添加一个可选的 NULL 列。但是如果我将 4-Places Json 字符串放入我的函数中,我不会得到任何结果

以下函数有什么问题?

DECLARE @json1 nvarchar(max),
        @json2 nvarchar(max)

--SET @json1 = '"Inst":["id":-627706141,"Instances":"Inst22"
--,"id":-627706141,"Instances":"20200605"
--,"id":-627706141,"Instances":"Sometghing"
--,"id":-627706141,"Instances":"SomeServer"
--,"id":-627706141,"Instances":"OptionalServer"]'
SET @json1 = '"Inst":["id":1505267576,"Instances":"Inst22"
,"id":1505267576,"Instances":"20190630"
,"id":1505267576,"Instances":"Something"
,"id":1505267576,"Instances":"SomeServer"]'
SET @json2 = '"Value":["id":-627706141,"Werte":"Intel(R) Xeon(R) CPU E5-2690 v3 ","id":-627706141,"Werte":" 2.60GHz"]'

SELECT * 
FROM 
 (
    SELECT *
    FROM OPENJSON( @json1 )
    WITH
    ( IID sys.int '$.Inst[0].id',
        sidInstance           sys.NVARCHAR( 50 ) '$.Inst[1].Instances',
        DatumInstance         sys.NVARCHAR( 50 ) '$.Inst[2].Instances',
        ServerInstance        sys.NVARCHAR( 50 ) '$.Inst[3].Instances',
        VirtualServerInstance sys.NVARCHAR( 50 ) '$.Inst[4].Instances',
        OptionalInstance      sys.NVARCHAR( 50 ) '$.Inst[5].Instances'
    ) a
inner join 
   OPENJSON( @json2 )
    WITH
    ( WID sys.int '$.Value[0].id',
        CPUType               sys.NVARCHAR( 50 ) '$.Value[0].Werte',
        Frequency             sys.NVARCHAR( 50 ) '$.Value[1].Werte'
    ) b on a.IID = b.WID
) t FOR JSON PATH , INCLUDE_NULL_VALUES ``` 

【问题讨论】:

@json1@json2 变量的 id 不同时(如您当前的示例),预期的输出是什么? 【参考方案1】:

id 字段值不相等。如果@json1中的id字段设置为-627706141,使其匹配@json2,那么输出如下

[
  
    "IID": -627706141,
    "sidInstance": "20190630",
    "DatumInstance": "Something",
    "ServerInstance": "SomeServer",
    "VirtualServerInstance": null,
    "OptionalInstance": null,
    "WID": -627706141,
    "CPUType": "Intel(R) Xeon(R) CPU E5-2690 v3 ",
    "Frequency": " 2.60GHz"
  
]

【讨论】:

非常感谢!这是原因

以上是关于无法在包含 NULL 值的 SQL 表中创建 JSON 格式的列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mongodb (node.js) 在集合中创建一个包含所有值的数组

无法使用 SQLite 在 ionic1 中创建多个表

如何在不插入值的情况下在sql中创建动态行?

在 Postgres 9.6 中创建数据透视表

如何在 SQL Server 2008 中创建具有新名称的重复表

在存储过程中创建动态表而在 PL/SQL 块表中创建时权限不足[重复]