我现在有个员工表employee 里面有要用的employeeID,employeeCode,employeeName,departmentID
还有一个函数Fa,传递departmentID,返回5列数据,其中一列是departmentID本身,其余4列是其他数据我现在想结合employee所有员工,把员工的部门ID传递到函数Fa查出每个人的共8列数据我现在想的建了临时表,先插入emplolyee表里面有的4列数据,然后循环每一条再去调用Fa,更新这个临时表的其他4列但是速度太慢了(目前员工有2万多条,后期会越来越多),希望高手帮忙~谢谢啦

解决方案 »

  1.   

    select * from employee e cross apply dbo.Fa(e.departmentID)
      

  2.   


    --楼主为什么不用两表直接连?select * from employee e left join department d on e.departmentid = d.id
      

  3.   


    那个函数Fa不是表,他里面是根据部门ID先找不同的部门类型,然后去不同的表里面取数据,函数Fa涉及到了另外一个函数和至少4张表我觉得,select e.id,e.name,(select aa from Fa(e.id)) from employee e这样的语句应该合法的,但是会报错除了那个apply以外,还有没有别的方法可以直接取列做参数做个二次查询???
      

  4.   

    那个函数Fa虽然用到的东西很多,但是绝对是很快的啊~ 查全部员工与传参数到Fa查询,都是立即返回的,感觉不到延迟~但不是不知道为啥cross了就慢的吓人~ 10分钟处理了1/4的数据~
      

  5.   

     select e.id,e.name, a.* from employee e inner join (select * from Fa(e.id)) a  
     on a.id=e.id
      

  6.   


    谢谢回复~你这个当真不行,e.id在那个范围内是无法取到的
      

  7.   

    select e.employeeID,e.employeeCode,e.employeeName,a.* from employee e
        inner join ( Fa(e.departmentID) )a  on e.departmentID=a.departmentID
      

  8.   

    select e.employeeID,e.employeeCode,e.employeeName,a.* from employee e
      inner join ( select Fa(e.departmentID) from (select * from employee)e )a on e.departmentID=a.departmentID
      

  9.   


    select a.employeeID,a.employeeCode,a.employeeName, c.* from employee a inner join (select * from (table)Fa(select departmentID from 
    employee) b) c on c.departmentID =a.departmentID 
      

  10.   

    本帖最后由 josy 于 2012-07-24 00:17:14 编辑
      

  11.   


    谢谢回复~不过我给@sql 的长度改为NVARCHAR(MAX) ,依然被截取了~