2016-11-14 341 views
2

我有这样的场景。我需要在SELECT语句中执行存储过程,其中调用存储过程的输入参数取自SELECT语句中使用的表。另外,下面有多个函数调用,它们使用SELECT子句中使用的表格输入,但由于某些原因它不起作用。这是我正在尝试实现的代码示例,如下所示。如何在SQL Server的SELECT子句中执行存储过程

代码示例: -

SELECT A, 
     B, 
     dbo.storedproc(function1(A,B), 
         function1(A,B), 
         function2(B,C), 
         D 
        ) AS newcol,    
     D 
FROM Table; 

错误: -

消息4121,级别16,状态1,过程XYZ,34号线


无法找到其中任何一列 “SCHEMANAME” 或用户定义的函数或集合“schemaname.dbo.storedproc”,或名称不明确。

注意: - 我使用基于集合的方法为输入表中的所有行调用此存储过程。

+0

不,你不能做到这一点。它应该是一个标量函数或动态sql。 –

+0

我有一个非常长的CTE链,我在其中一个CTE中尝试实现此功能.... – Teja

回答

4

你不能执行在你正在寻找select..What存储过程是类似下面

--scalar valued function 
    create function dbo.test(int a) 
    returns int 
    as 
    begin 
    return someval of int 
    end 

现在你可以在上面选择调用诸如标量值的功能/表值函数如下

select a,b,dbo.test(a) from t 

,如果你的存储过程返回多发的值,你可以创建表值函数,并且可以使用交叉/外适用

---表值函数例如

CREATE FUNCTION dbo.ivf 
    (@a int, 
     @b int) 
RETURNS table 
AS 
RETURN (
     SELECT a,b from table 
     ) 

现在你可以调用这个像下面

select a,b from table t1 
cross apply 
(select * from dbo.ivf(a,b))c 
相关问题