SQL Server 2016 - 为啥我需要为我的选择语句指定一个根元素

Posted

技术标签:

【中文标题】SQL Server 2016 - 为啥我需要为我的选择语句指定一个根元素【英文标题】:SQL Server 2016 - Why would I need to specify a root element for my select statementSQL Server 2016 - 为什么我需要为我的选择语句指定一个根元素 【发布时间】:2020-12-11 23:13:24 【问题描述】:

为什么我需要在我的选择语句中指定一个根元素?

我在下面的代码中谈论的是ROOT('data')

// GET api/Product
[HttpGet]
public async Task Get()

    await sqlQuery.Sql(
        @"select ProductID, Name, Color, Price, Quantity, JSON_VALUE(Data, '$.MadeIn') as MadeIn, JSON_QUERY(Tags) as Tags 
        from Product
        FOR JSON PATH, ROOT('data')"
     ).Stream(Response.Body, EMPTY_PRODUCTS_ARRAY);

【问题讨论】:

【参考方案1】:

可选的 ROOT('array name') 为 FOR JSON PATH 指定的数组命名。 ROOT 与 WITHOUT_ARRAY_WRAPPER 互斥,只能指定 1。使用 ROOT('data') 查询的结果将类似于

 "data": [  ...  ]

如果指定 WITHOUT_ARRAY_WRAPPER,则生成的 JSON 将如下所示

 "field1": "value", ... 

【讨论】:

以上是关于SQL Server 2016 - 为啥我需要为我的选择语句指定一个根元素的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:将列转换为行

如何将 sql server 链接到 Microsoft Access?

SQL Server 2016 子查询指南

为啥我在 sql server ROW_NUMBER() 中出现错误?

SQL Server 为啥索引不与 OR 一起使用

为啥我在此 SQL Server 内联表值函数上收到 11555 错误?