如何在SQL Server中的SELECT子句中执行存储过程

时间:2016-11-14 15:17:05

标签: sql sql-server tsql

我有这样的情景。我需要在<canvas id='canvas' width=350 height=350/>语句中执行存储过程,其中调用存储过程的输入参数取自SELECT语句中使用的表。此外,还有多个函数调用如下所示,它们使用SELECT子句中使用的表的输入,但由于某种原因它不起作用。这是我正在尝试实现的下面的代码示例。

代码示例: -

SELECT

错误: -

  

Msg 4121,Level 16,State 1,Procedure XYZ,Line 34


  找不到列“schemaname”或用户定义的函数或聚合“schemaname.dbo.storedproc”,或者名称不明确。

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

1 个答案:

答案 0 :(得分:4)

你不能在select中执行存储过程。你正在寻找的是一个标量值函数/表值函数,如下所示

--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

如果存储的proc返回多个值,则可以创建表值函数并可以使用cross / outer apply

---表值函数示例

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