在SELECT语句中使用内联存储过程的结果

qJa*_*ake 3 sql sql-server stored-procedures common-table-expression

我想在一个SELECT语句的列定义中执行内联存储过程,类似于:

SELECT n.Name,
       n.Key,
       (EXEC sp_GetNickname @nameKey = n.NameKey) AS Nickname
FROM Names n
Run Code Online (Sandbox Code Playgroud)

我无权修改存储过程(它来自第三方系统),但我知道它总是只选择一行和一列(它是标量结果).

我需要能够内联调用它,因为这个select语句在递归CTE中,如下所示:

WITH Nicknames (Name, Key)
AS
(
    SELECT ... -- Base
    UNION ALL
    SELECT ... -- Recursive
)
Run Code Online (Sandbox Code Playgroud)

如果存储过程更有用,它还有一个"OUT"版本的存储过程,它将按如下方式执行:

EXEC sp_GetNicknameOut @nameKey = n.NameKey,
                       @outNickname = @theNickname OUTPUT
Run Code Online (Sandbox Code Playgroud)

我无法向数据库添加任何存储过程或函数,因为此查询是在动态执行C#应用程序.

我怎样才能做到这一点?

dea*_*ean 8

这不能按要求完成.您可以在不调用过程的情况下执行递归CTE并将结果保存到临时表中,然后在其上打开游标,然后在游标中执行过程.不好,但我没有看到任何其他方式.