返回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对象