2011-01-30 23 views
0

我有一個表"Departments" (ID,deptID)如何在一個循環中

ID parentdeptID 
2 null 
3 null 
7 2 
8 2 
9 3 

和第二臺"Filter"包含的ID只

ID 
2 
9 

,並與只輸入一個存儲過程prameter @deptID和運行存儲過程輸出是從加入一些根據輸入ID表的結果

我的問題是:從表「Filt員工閱讀方式ER」,並得到標識,併爲每個ID獲得其孩子的,如果它在我們的例子中

2,7,8,9 (2,9 from "Filter" and 7,8 from "Departments" as childs of 2)

,然後這4個ID的每一個通過ID EXCUTE存儲過程

這是概述,如果任何一個有一個更好的方法,而無需使用存儲過程的歡迎他

+0

這是相當很難說是否有可能做你想要什麼,而無需使用存儲過程時,你還沒有告訴我們的存儲過程做什麼。 – 2011-01-30 12:53:48

+0

親愛的'馬克拜爾斯',感謝您的反饋,我編輯了我的問題,我希望現在清楚 – RMohammed 2011-01-30 12:58:23

回答

2

我不知道我理解你的模型太清楚了,但這裏的你如何能做到循環和執行的內部存儲過程它:

編輯我想我現在明白你的問題了。

declare @filterId int 
declare @deptId int 

select @filterId = min(ID) from Filter 
while @filterId is not null 
    begin 
     -- run the stored procedure for the main filter ID 
     exec procedureName @filterId 

     -- run the SP for the related IDs in Department table 
     select @deptId = min(ID) from Departments where parentdeptID = @filterID 
     while @deptId is not null 
     begin 
      exec procedureName @deptId 
      select @deptId = min(ID) from Departments where ID > @deptId and parentdeptID = @filterID 
     end 

     select @filterId = ID from Filter where ID > @filterId 
    end 

希望這會讓你開始。

1

做你想要什麼,而不該存儲過程,你應該加入DEPTID與存儲過程中的查詢。

假設你的SP做了select DeptID, DeptInfo from @SomeOtherTableWithData where DeptiID = @DeptID

下面是示例代碼與你的表與聯接,而不是替換該存儲過程。

-- Setup sample data 
declare @Departments table (DeptID int, ParentDeptID int) 
declare @Filter table (DeptID int) 
declare @SomeOtherTableWithData table (DeptID int, DeptInfo varchar(50)) 

insert into @Departments values (2, null) 
insert into @Departments values (3, null) 
insert into @Departments values (7, 2) 
insert into @Departments values (8, 2) 
insert into @Departments values (9, 3) 

insert into @Filter values(2) 
insert into @Filter values(9) 

insert into @SomeOtherTableWithData values (2, 'Info DeptID 2') 
insert into @SomeOtherTableWithData values (3, 'Info DeptID 3') 
insert into @SomeOtherTableWithData values (7, 'Info DeptID 7') 
insert into @SomeOtherTableWithData values (8, 'Info DeptID 8') 
insert into @SomeOtherTableWithData values (9, 'Info DeptID 9') 

-- Get the DeptID's into temporary table #DeptIDs 
select D.DeptID -- Parents 
into #DeptIDs 
from @Departments as D 
    inner join @Filter as F 
     on D.DeptID = F.DeptID 
union 
select D.DeptID -- Children 
from @Departments as D 
    inner join @Filter as F 
     on D.ParentDeptID = F.DeptID 

-- Use #DeptID in a join with the query in the stored procedure 
select S.DeptID, S.DeptInfo 
from #DeptIds as D 
    inner join @SomeOtherTableWithData as S 
     on D.DeptID = S.DeptID 

-- Drop the temporary table 
drop table #DeptIDs 

結果是

DeptID DeptInfo 
2 Info DeptID 2 
7 Info DeptID 7 
8 Info DeptID 8 
9 Info DeptID 9 

您可以使用子查詢,而不是臨時表,如果你想只是一個SQL語句。