对同一查询中另一个 SELECT 返回的所有行执行 SELECT

本文关键字:SELECT 执行 返回 查询 另一个 | 更新日期: 2023-09-27 18:36:31

使用此查询:

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 返回的所有行执行 SELECT

您应该使用 OUTER APPLYCROSS APPLY 而不是光标:

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