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/7/sql-server/23.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
将每个员工的员工详细信息作为JSON数组返回给SQL Server中的每个员工_Json_Sql Server - Fatal编程技术网

将每个员工的员工详细信息作为JSON数组返回给SQL Server中的每个员工

将每个员工的员工详细信息作为JSON数组返回给SQL Server中的每个员工,json,sql-server,Json,Sql Server,我想从SQL server以JSON对象的形式返回查询结果。我有下面的Employee和EmployeeDtl表 DROP TABLE IF EXISTS #Employee CREATE TABLE #Employee (EmpId bigint, EmpName varchar(2000)) INSERT INTO #Employee VALUES (1, 'A') DROP TABLE IF EXISTS #EmployeeDtl CREATE TABLE #EmployeeDtl (

我想从SQL server以JSON对象的形式返回查询结果。我有下面的Employee和EmployeeDtl表

DROP TABLE IF EXISTS #Employee
CREATE TABLE #Employee (EmpId bigint, EmpName varchar(2000))

INSERT INTO #Employee VALUES (1, 'A')

DROP TABLE IF EXISTS #EmployeeDtl
CREATE TABLE #EmployeeDtl (EmpId bigint, WorkObject varchar(100), LocationName varchar(100))

INSERT INTO #EmployeeDtl VALUES (1, 'AAA', 'AAAAA')
INSERT INTO #EmployeeDtl VALUES (1, 'BBB', 'BBBB')
INSERT INTO #EmployeeDtl VALUES (1, 'CCC', 'CCCC')
我想以下面的格式返回数据

{
    "Employees": [{
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": [{
                "WorkObject": "AAA",
                "LocationName": "AAAAA"
            },
            {
                "WorkObject": "BBB",
                "LocationName": "BBBB"
            },
            {
                "WorkObject": "CCC",
                "LocationName": "CCCC"
            }
        ]
    }]
}
{
    "Employees": [{
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": {
            "WorkObject": "AAA",
            "LocationName": "AAAAA"
        }
    }, {
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": {
            "WorkObject": "BBB",
            "LocationName": "BBBB"
        }
    }, {
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": {
            "WorkObject": "CCC",
            "LocationName": "CCCC"
        }
    }]
}
我已经写了下面的查询

SELECT 
    E.EmpId, E.EmpName, ED.WorkObject AS [EmpDtl.WorkObject], ED.LocationName AS [EmpDtl.LocationName]
FROM
    #Employee E 
    INNER JOIN #EmployeeDtl ED ON E.EmpId = ED.EmpId
FOR
    JSON PATH, ROOT('Employees')
但是,上面的查询以下面的格式返回数据

{
    "Employees": [{
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": [{
                "WorkObject": "AAA",
                "LocationName": "AAAAA"
            },
            {
                "WorkObject": "BBB",
                "LocationName": "BBBB"
            },
            {
                "WorkObject": "CCC",
                "LocationName": "CCCC"
            }
        ]
    }]
}
{
    "Employees": [{
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": {
            "WorkObject": "AAA",
            "LocationName": "AAAAA"
        }
    }, {
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": {
            "WorkObject": "BBB",
            "LocationName": "BBBB"
        }
    }, {
        "EmpId": 1,
        "EmpName": "A",
        "EmpDtl": {
            "WorkObject": "CCC",
            "LocationName": "CCCC"
        }
    }]
}
你能帮我理解我做错了什么吗。

你需要将
#EmployeeDtl
嵌套为子查询:

SELECT E.EmpId,
       E.EmpName,
       (SELECT ED.WorkObject AS [WorkObject],
               ED.LocationName AS [LocationName]
        FROM #EmployeeDtl ED
        WHERE ED.EmpId = E.EmpId
        FOR JSON PATH) AS EmpDtl
FROM #Employee E
FOR JSON PATH, ROOT('Employees');
输出:

{
     "Employees": [
          {
               "EmpId": 1,
               "EmpName": "A",
               "EmpDtl": [
                    {
                         "WorkObject": "AAA",
                         "LocationName": "AAAAA"
                    },
                    {
                         "WorkObject": "BBB",
                         "LocationName": "BBBB"
                    },
                    {
                         "WorkObject": "CCC",
                         "LocationName": "CCCC"
                    }
               ]
          }
     ]
}
您需要将
#EmployeeDtl
嵌套为子查询:

SELECT E.EmpId,
       E.EmpName,
       (SELECT ED.WorkObject AS [WorkObject],
               ED.LocationName AS [LocationName]
        FROM #EmployeeDtl ED
        WHERE ED.EmpId = E.EmpId
        FOR JSON PATH) AS EmpDtl
FROM #Employee E
FOR JSON PATH, ROOT('Employees');
输出:

{
     "Employees": [
          {
               "EmpId": 1,
               "EmpName": "A",
               "EmpDtl": [
                    {
                         "WorkObject": "AAA",
                         "LocationName": "AAAAA"
                    },
                    {
                         "WorkObject": "BBB",
                         "LocationName": "BBBB"
                    },
                    {
                         "WorkObject": "CCC",
                         "LocationName": "CCCC"
                    }
               ]
          }
     ]
}