Yan*_*hon 0 c# sql sql-server-2008
有了这个查询:
SELECT id FROM org.employees WHERE {some_condition}
Run Code Online (Sandbox Code Playgroud)
对于上述查询中的每一行,我需要调用:
SELECT * FROM org.work_schedule(@employeeId, @fromDate, @toDate)
Run Code Online (Sandbox Code Playgroud)
org.work_schedule表值函数在哪里处理所有员工的可用工作计划和约束,并返回两个DATETIME(开始,结束)列,表示给定员工在提供的日期范围内的可用性.
我想在第一个查询上使用游标并提供一个将返回的临时表.这是唯一的解决方案吗?
该项目在C#中,我也可以直接在C#中实现这一点,但我怀疑在SQL中完全执行此操作会更加优化(SQL Server 2008).
这似乎是本地化的,我会将问题概括为:
如何为另一个查询(SELECT)返回的每一行执行查询(SELECT)并在一次调用中返回整个结果(动态地执行SELECT UNION SELECT UNION ...)?
谢谢
您应该使用OUTER APPLY或CROSS APPLY代替游标:
SELECT *
FROM ( SELECT id
FROM org.employees
WHERE {some_condition}) A
OUTER APPLY org.work_schedule(A.id, @fromDate, @toDate) B
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |