返回SQL Server中的复杂数据类型

时间:2014-02-14 07:18:46

标签: sql sql-server

我有两个表格如下:一个是部门,另一个是员工。每个部门都有几名员工。这是表定义:

Create table [dbo].[Department]
(
    ID int not null,
    Name varchar(100) not null,
    revenue int not null
)

Create table [dbo].[Employee]
(
    ID int not null,
    DepartmentID int not null,--This is foreign key to Department
    Name varchar(100) not null,
    Level int not null
)

现在,如果部门收入超过某个值,我想查询所有部门的员工。因此结果将包含一个部门列表。对于每个部门,它还应包含员工清单。

在我们的客户端,我们使用c#来检索数据,这里是界面:

public List<Department> GetHighRevenueDepartmentWithEmployee(int revenueBar)
{
    throw new NotImplementedException();
}

我的问题是:是否可以在一个查询/存储过程中获得复合结果。可以使用一个存储过程多次查询,但是整个数据必须一次性返回给客户端。(这是性能原因)我们如何实现这一点?我知道我们可以在这里定义表值类型,但我不能定义一个表值类型,它包含另一个表值作为列内部。

1 个答案:

答案 0 :(得分:1)

通常,您只需返回包含两个表中所有列的结果集:

SELECT
  d.ID as DepartmentID,d.Name as DepartmentName,d.Revenue,
  e.ID as EmployeeID,e.Name as EmployeeName,e.Level
FROM
   Department d
      inner join
   Employee e
      on d.ID = e.DepartmentID
WHERE
   d.revenue > @value
ORDER BY
   d.ID

现在,为部门返回的数据将重复多次 - 每位员工一次。但那没关系。只需为每个新部门使用第一行,并在其余行中忽略它。那将是结果集的第一行,以及DepartmentID与前一行不同的任何行。