Итерации и массив в T-Sql - PullRequest
       13

Итерации и массив в T-Sql

0 голосов
/ 17 октября 2011

Допустим, у меня есть класс Location, который представляет местоположения.

public class Location
{
  public int LocationID { get; set; }
  public int JuridictionID { get; set; }
  public int LocationName { get; set; }
}

Пример: Серебряный источник расположен в округе Монтгомери, который находится в штате Мэриленд, который находится в США.Таким образом, JuriditionID для Мэриленда будет LocationID для США и так далее.

public List<Location> SetHierarchyOfLocation(int JuridicitionID)
{
        var list = new List<Location>();
        if (JuridicitionID > 0)
        {
            while (JuridicitionID > 0)
            {
                var location = new Location();
                location = GetLocationByID(JuridicitionID);                    
                list.Add(location);
                JuridicitionID = location.JuridictionID;
            }
        }
        list.Reverse();
        return list;
    }

pubilc Location GetLocationByID(int LocationID)
{
  return db.Locations.FirstOrDefault(l => l.LocationID == LocationID);
}

Это прекрасно работает.Но теперь я понимаю, что это приведет к множеству отдельных обращений к базе данных.

Но я не знаю, как написать хранимую процедуру , которая заменит это.Кто-нибудь может мне помочь???

Спасибо.

1 Ответ

1 голос
/ 17 октября 2011

Я сделал стол, похожий на твой, который называется [location]

create table location(locationid int, JuridicitionID int, placename varchar(30))

insert location values(1, 0, 'USA')
insert location values(2, 1, 'Maryland')
insert location values(3, 2, 'Silver Spring')

go

create procedure SetHierarchyOfLocation(@JuridicitionID int) 
as
begin
;with cte as
(
select placename, JuridicitionID
from location where JuridicitionID = @JuridicitionID
union all
select t.placename, t.JuridicitionID
from cte join location t on cte.JuridicitionID = t.locationid
)
select placename from cte
order by JuridicitionID
end

go
exec SetHierarchyOfLocation 2
go
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...