如何实现 OPENJSON 将 JSON 代码作为列中的文本。如何在 AZURE SQL Dataware House 中的表列上使用 OPENJSON?

Posted

技术标签:

【中文标题】如何实现 OPENJSON 将 JSON 代码作为列中的文本。如何在 AZURE SQL Dataware House 中的表列上使用 OPENJSON?【英文标题】:How to implement OPENJSON Having JSON code as a text inside a column. How do i use OPENJSON on the column of a table in AZURE SQL Dataware House? 【发布时间】:2021-03-02 05:37:53 【问题描述】:

例如:原始数据

| ORDER# | SUBORDER# |             DISCOUNTS          |
|------- |-----------| -------------------------------|
|   1    |    1-123  | '[ discount:"1",amount:"1"]' |
|   1    |    1-123  | '[ discount:"2",amount:"2"]' |

想要在折扣上应用 OPENJSON 并具有以下输出:

| ORDER# | SUBORDER# | discount |   amount   |
|------- |-----------| ---------|------------|
|   1    |    1-123  |    1     |     1      |
|   1    |    1-123  |    2     |     2      |

Msg 137, Level 15, State 2, Line 44
Must declare the scalar variable "@discounts".

【问题讨论】:

嗨@syed ahmed,如果我在答案中理解错误,请纠正我。 :) 【参考方案1】:

我已经更新了答案,请在插入语句后添加;

    创建表并插入两行:
create table dbo.test(

    ORDER# varchar(255),
    SUBORDER# varchar(255),
    DISCOUNTS varchar(255)
);

insert into dbo.test values ('1','1-123','[ "discount":"1","amount":"1"]');
insert into dbo.test values ('1','1-123','[ "discount":"2","amount":"2"]');

    那么我们就可以使用下面的sql来查询数据了。
select ORDER#,SUBORDER#,A.*
from  dbo.test t
CROSS APPLY OPENJSON(t.DISCOUNTS) 
WITH (
    discount varchar(255),
    amount varchar(255)
) A;

3.结果如下:

【讨论】:

Msg 319, Level 15, State 2, Line 14 关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。 您好,您按照我的步骤操作了吗?您可以创建一个简单的测试。效果很好。 你好 Joseph Xu,我跟着你的步骤也是一样的,我也尝试过和你一样的数据,但我不能,如果他们有任何其他逻辑????? discountamount 是否添加了双引号? 创建表 dbo.test( ORDER# varchar(255), SUBORDER# varchar(255), DISCOUNTS varchar(255) ) 插入 dbo.test 值 ('1','1-123' ,'[ "discount":"1","amount":"1"]'), ('1','1-123','[ "discount":"2","amount": "2"]') select ORDER#,SUBORDER#,A.* from dbo.test as t CROSS APPLY OPENJSON(t.DISCOUNTS) WITH ( discount varchar(255), amount varchar(255) ) A;从 dbo.test 中选择 *

以上是关于如何实现 OPENJSON 将 JSON 代码作为列中的文本。如何在 AZURE SQL Dataware House 中的表列上使用 OPENJSON?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 和 OPENJSON 将 JSON 插入 SQL Server 2016

使用 OPENJSON 将 JSON 数组解析为表

OpenJson 使用通配符

OPENJSON 不会将所有文档都选择到 SQL 表中

SQL Server中的OpenJson用于嵌套的json数据?

如何反转 SQL Server 中的 OPENJSON() 函数?