如何在SQL Server的SELECT子句中执行存储过程
问题描述:
我有这样的场景。我需要在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”,或名称不明确。
注意: - 我使用基于集合的方法为输入表中的所有行调用此存储过程。
答
你不能执行在你正在寻找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
不,你不能做到这一点。它应该是一个标量函数或动态sql。 –
我有一个非常长的CTE链,我在其中一个CTE中尝试实现此功能.... – Teja