2014-02-14 8 views
0

У меня есть две таблицы, как показано ниже: Один - это отдел, другой - сотрудник. У каждого отдела есть несколько сотрудников. Вот определение таблицы:Возврат Сложные типы данных в SQL-сервере

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(); 
} 

Мой вопрос состоит в следующем: можно ли получить результат соединения в одном/хранимой процедуры запроса. Это нормально использовать одну хранимую процедуру для запроса несколько раз, но все данные должны быть возвращены обратно клиенту за один раз. (Это причина производительности). Как мы можем достичь этого? Я знаю, что здесь мы можем определить тип таблиц таблиц, но я не могу определить тип значения таблицы, который содержит другое значение таблицы в качестве столбца внутри.

+0

Похоже, что вы должны использовать ORM-объектно-реляционную карту, такую ​​как Entity Framework. Это точно, что эти инструменты отлично подходят - превращение несколько неуклюжих строк/столбцов реляционных таблиц в приятные, дружественные объекты .NET –

ответ

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 отличается от предыдущей строки.

Смежные вопросы