我有一张有很多列的表格。是否合适的问题超出了这个问题的范围。我想选择一行(其中 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'
如果你想把整个东西作为一个大的 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
仅用于兼容性。