2011-06-20 57 views
2

我有一个表值函数,它返回给定日期的人员的老板。循环表值函数sql

dbo.Bosses(@empId,@date)

我如何遍历从另一个信息这个功能呢?

也就是说,我想使用有一个日期,员工编号表B,我想用它们作为参数传递给找到表B输入的每一天

 
Table B 
EmpId  int 
hours  float 
day  datetime 
creator int 

回答

4

假设你有SQL服务器2005+

SELECT 
    * 
FROM 
    TableB 
CROSS APPLY 
    dbo.Bosses(TableB.EmpID, TableB.day) AS bosses 

CROSS APPLY只会返回Bosses函数返回结果的结果。类似于INNER JOIN。

OUTER APPLY将返回TableB中每个条目的结果,类似于LEFT JOIN。

3

您需要使用所有的老板APPLY运营商(CROSSOUTER,前者类似于INNER JOIN,后来 - 到LEFT JOIN):

SELECT b.*, a.* 
FROM table_b b 
CROSS APPLY dbo.Bosses(b.emp_id, b.emp_date)a