两个查询,一个 JSON 结果

Pab*_*dal 2 sql-server json

我有两个查询,但我只想要一个结果:

1 查询,给我列的所有数据

 SELECT * FROM dbo.Notificacion
 FOR JSON PATH, ROOT('notification')
Run Code Online (Sandbox Code Playgroud)

2 查询给我所有的列名

 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'notificacion' ORDER BY ORDINAL_POSITION
 FOR JSON PATH, ROOT('COLUMN_NAME')
Run Code Online (Sandbox Code Playgroud)

这样,我可以使应用程序的视图更加动态。

我想要这样的 JSON:

 SELECT * FROM dbo.Notificacion
 FOR JSON PATH, ROOT('notification')
Run Code Online (Sandbox Code Playgroud)

And*_*y M 5

这可能不是给猫剥皮的最佳方式,但是当我需要在单个输出中组合不同的 JSON 结果时,我通常使用该JSON_QUERY()函数。

这是在您的情况下应用它的一种方法:

SELECT
  COLUMN_NAMES = JSON_QUERY(inf_sch.json_result)
, Notification = JSON_QUERY(notif  .json_result)
FROM
  (
    SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'notificacion'
    ORDER BY ORDINAL_POSITION
    FOR JSON PATH
  ) AS inf_sch (json_result)
, (
    SELECT *
    FROM dbo.Notificacion
    FOR JSON PATH
  ) AS notif (json_result)
FOR JSON
  PATH, WITHOUT_ARRAY_WRAPPER
Run Code Online (Sandbox Code Playgroud)

两个派生表是ROOT()去掉说明符的两个原始查询。它们各自产生一个 JSON 输出。每个输出基本上都使用该JSON_QUERY函数注入到外层输出中。该函数确保将其参数作为 JSON 对象而不是nvarchar表示一个的字符串注入。

WITHOUT_ARRAY_WRAPPER查询末尾的选项确保顶级 JSON 作为单个对象而不是数组返回。

同样,我明白这可能不是最好的方法。也许使用子句的AUTO选项可以实现更简洁和优雅的方式FOR JSON。我承认我对它不是很熟悉。希望有人可以过来向我们和其他观众展示如何在您的场景中成功使用它。