2013-10-23 56 views
0

與此查詢之內的所有返回的行執行SELECT從另一個選擇:相同的查詢

SELECT id FROM org.employees WHERE {some_condition} 

對於從上面的查詢中的每一行,我需要調用:

SELECT * FROM org.work_schedule(@employeeId, @fromDate, @toDate) 

其中org.work_schedule是表值函數,用於處理所有員工的可用工作計劃和約束,並返回兩個DATETIME(開始,結束)列,表示給定員工在所提供的日期範圍內的可用性。

我想在第一個查詢上使用遊標並提供一個將返回的臨時表。這是唯一的解決方案嗎?

該項目是在C#中,我也可以直接在C#中完成這項工作,但我懷疑這完全是在SQL(SQL Server 2008)中完成的。

這似乎是本地化的,我會概括的問題有:

我如何執行由另一個查詢(SELECT)返回每一行的查詢(SELECT)和一個調用返回的整個結果(做動態SELECT UNION SELECT UNION ...)?

感謝

+0

那豈不是沒有的功能更容易只是直接查詢您的表?看起來像INNER JOIN會很容易。你的數據庫結構是什麼樣的? –

+0

嘗試'CROSS APPLY' – zimdanen

回答

7

您應該使用OUTER APPLYCROSS APPLY代替光標:

SELECT * 
FROM ( SELECT id 
     FROM org.employees 
     WHERE {some_condition}) A 
OUTER APPLY org.work_schedule(A.id, @fromDate, @toDate) B