[英]Return Complex data types in 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();
}
我的问题是:是否可以在一个查询/存储过程中获得复合结果。 可以使用一个存储过程多次查询,但是必须一次将全部数据返回给客户端。(这是性能原因)如何实现呢? 我知道我们可以在这里定义表值类型,但是我不能定义其中包含另一个表值作为列的表值类型。
通常,您只需要返回包含两个表中所有列的结果集:
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
与上一行不同的任何行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.