选择一行并将其作为json数组返回

问题描述 投票:0回答:1

我有一张有很多列的表格。是否合适的问题超出了这个问题的范围。我想选择一行(其中 pkValue=123)并将其作为 json 数组返回。

[{"TableName":"mytable", "ColumnName":"myFirstCol","pkValue":123, "colValue":"myFirstValue", "colType":"myFirstType"},
...,
{"TableName":"mytable", "ColumnName":"myLastCol","pkValue":123, "colValue":"myLastValue", "colType":"myLastType"}]

我想在不命名查询中的所有列的情况下这样做。 使用 SQL Server 2022 中可用的新 json 函数可能会很有趣。我只是不知道怎么做。

以下查询返回结果的元数据部分:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='myTable'
sql sql-server unpivot information-schema
1个回答
0
投票

如果你想把整个东西作为一个大的 JSON 数组,你可以简单地做

SELECT c.*
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'myTable'
FOR JSON PATH;

如果您希望每个对象都作为单独的对象,则可以在子查询中使用嵌套

FOR JSON
来实现。注意
WITHOUT_ARRAY_WRAPPER
的使用,并且子查询中没有
FROM

SELECT
  (
    SELECT
      c.TABLE_NAME,
      c.COLUMN_NAME,
      c.DATA_TYPE, 
      c.CHARACTER_MAXIMUM_LENGTH
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
  ) AS json
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'myTable';

你也可以这样做

SELECT *

SELECT
  (
    SELECT
      c.*
    FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
  ) AS json
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'myTable';

旁注:我建议您使用

sys.columns
,因为
INFORMATION_SCHEMA
仅用于兼容性。

© www.soinside.com 2019 - 2024. All rights reserved.