Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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/26.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/3/arrays/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
返回SQL server中的复杂数据类型_Sql_Sql Server - Fatal编程技术网

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

返回SQL server中的复杂数据类型,sql,sql-server,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

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

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();
}
public List gethighrevenueedepartmentwithemployee(intrevenuebar)
{
抛出新的NotImplementedException();
}

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

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

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

现在,为该部门返回的数据将重复多次——每个员工一次。但那很好。只需为每个新部门使用第一行,在其余行中忽略它。这将适用于结果集的第一行,以及
部门ID
与前一行不同的任何行。

听起来您应该使用类似ORM对象关系映射器的实体框架。这正是这些工具所擅长的——将关系表中有些笨拙的行/列转换为友好的.NET对象