如何合并多次调用存储过程的结果?

How to consolidate results from multiple invocations of a stored procedure?

我有一个应该按如下方式工作的存储过程:

DECLARE @TagNames AS TABLE
(
    tag NVARCHAR(50) NOT NULL
)

-- Get list of tags
INSERT INTO @TagNames
SELECT tag
FROM tagTable
WHERE tag LIKE @tagPattern

-- Create unified result set, combining results from stored proc for each tag
SELECT n.tag, r.time, r.value FROM @TagNames AS n
CROSS APPLY
    dbo.GetResultsForTag(n.tag) AS r -- Not valid

但是,我无法使用 CROSS APPLY,因为 dbo.GetResultsForTag() 是一个存储过程。

dbo.GetResultsForTag() 的实现依赖于调用 EXEC 传递给链接服务器的动态 SQL,所以我相信它不能转换成 table - 值函数。 table 值函数中不允许使用动态 SQL。

链接服务器通过 OLE-DB 提供程序进行通信,但它不是 SQL 服务器实例。它是一个 OSISoft PI 过程历史数据库。通常,在单个查询中查询多个数据标签非常容易,但在本例中,我正在做一些计算,需要我提供一个指定单个标签名称的过滤器表达式。所以每个标签都需要单独查询数据源。

据我所知,存储过程不能用作 JOIN 的右侧?

我还有哪些其他选择可以将这些结果整合在一起?只是一个光标?


编辑:我已经想出如何解决迫使我使用动态 SQL 和存储过程的潜在障碍。现在我可以使用常规 SQL,这允许我使用 Table 值函数而不是存储过程,这允许我使用 JOIN 和 CROSS APPLY 而不是丑陋的游标 hacks。

将存储过程重写为 Table 值函数??

或者,重新编写它以取消过滤器,将其转储到 table(可能是临时 table),然后加入那个。