Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用列名和值作为键值对创建JSON_Sql_Json_Sql Server_Tsql - Fatal编程技术网

Sql 使用列名和值作为键值对创建JSON

Sql 使用列名和值作为键值对创建JSON,sql,json,sql-server,tsql,Sql,Json,Sql Server,Tsql,我们必须将数据导出格式化为具有特定格式的JSON。这里是一个测试用例: DECLARE @tmp TABLE (ID INT, value1 VARCHAR(30), value2 VARCHAR(30)) INSERT @tmp VALUES (1,'test1','test2') 输出应为: { “ID”:1, “自定义_属性”:[ { “属性代码”:“值1”, “值”:“test1” }, { “属性代码”:“值2”, “值”:“test2” } ] } 我们必须为某些列创建两个键值对

我们必须将数据导出格式化为具有特定格式的JSON。这里是一个测试用例:

DECLARE @tmp TABLE (ID INT, value1 VARCHAR(30), value2 VARCHAR(30))
INSERT @tmp VALUES (1,'test1','test2')
输出应为:

{
“ID”:1,
“自定义_属性”:[
{
“属性代码”:“值1”,
“值”:“test1”
},
{
“属性代码”:“值2”,
“值”:“test2”
}
]
}
我们必须为某些列创建两个键值对。第一个描述列名,第二个描述值。并在顶部将其打包成一个阵列


我想知道这是否适用于本机t-sql JSON函数,因为我需要一个适当的JSON作为输出(而不是字符串)。

您需要对JSON使用嵌套的

DECLARE @tmp TABLE(ID INT, value1 VARCHAR(30), value2 VARCHAR(30));
INSERT @tmp VALUES (1, 'test1', 'test2');

SELECT ID, custom_attributes = (
    SELECT attribute_code, value
    FROM @tmp AS x
    -- column to rows
    CROSS APPLY (VALUES
        ('value1', value1),
        ('value2', value2)
    ) AS a(attribute_code, value)
    WHERE x.ID = t.ID
    FOR JSON PATH
)
FROM @tmp AS t
FOR JSON AUTO

您需要对JSON使用嵌套的

DECLARE @tmp TABLE(ID INT, value1 VARCHAR(30), value2 VARCHAR(30));
INSERT @tmp VALUES (1, 'test1', 'test2');

SELECT ID, custom_attributes = (
    SELECT attribute_code, value
    FROM @tmp AS x
    -- column to rows
    CROSS APPLY (VALUES
        ('value1', value1),
        ('value2', value2)
    ) AS a(attribute_code, value)
    WHERE x.ID = t.ID
    FOR JSON PATH
)
FROM @tmp AS t
FOR JSON AUTO

我找到了一个可能的答案,这是可行的,但似乎有点复杂

SELECT tmp.ID
,      (
        SELECT ca.attribute_code
        ,      ca.[value]
        FROM @tmp tmp2
        CROSS APPLY (
            VALUES 
                ('value1',value1),
                ('value2',value2)
        ) ca (attribute_code, [value])
        WHERE tmp2.ID = tmp.ID
        FOR JSON PATH
        ) [custom_attributes]
FROM @tmp tmp
FOR JSON PATH

我找到了一个可能的答案,这是可行的,但似乎有点复杂

SELECT tmp.ID
,      (
        SELECT ca.attribute_code
        ,      ca.[value]
        FROM @tmp tmp2
        CROSS APPLY (
            VALUES 
                ('value1',value1),
                ('value2',value2)
        ) ca (attribute_code, [value])
        WHERE tmp2.ID = tmp.ID
        FOR JSON PATH
        ) [custom_attributes]
FROM @tmp tmp
FOR JSON PATH

到目前为止你试过什么?你看过JSON的
了吗?如果没有,我建议你这样做,如果你失败了,展示你的尝试。(注意:
FOR JSON
是在SQL Server 2016中添加的。如果您使用的是较旧版本的SQL Server,则可能需要使用其他工具从数据生成JSON(因为仅在T-SQL中生成JSON并不是一项简单的任务),或者创建CLR函数。我假设您使用的是2016+而没有版本标记。)到目前为止你试过什么?你看过JSON的
了吗?如果没有,我建议你这样做,如果你失败了,展示你的尝试。(注意:
FOR JSON
是在SQL Server 2016中添加的。如果您使用的是较旧版本的SQL Server,则可能需要使用其他工具从数据生成JSON(因为仅在T-SQL中生成JSON并不是一项简单的任务),或者创建CLR函数。我假设您使用的是2016+而没有版本标记。)