TSQL存储过程结果作为另一个选择

时间:2018-02-27 10:35:57

标签: tsql stored-procedures

我有一个带输入和输出参数的存储过程。

CREATE PROC [dbo].[pr_MySP]
    @date DATETIME,
    @usd MONEY OUTPUT
WITH ENCRYPTION
AS
BEGIN
    ...
END
GO

此存储过程调用另一个存储过程,因此我无法创建UDF来执行此操作。现在我需要将此proc结果用作另一个select中的列。有点喜欢这个

select *, ([dbo].[pr_MySP] result) from ... 

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

对于一次SP跑:

--Declare variables to hold output
DECLARE @usdout MONEY 
--Exec SP and hold value
EXEC pr_MySP @date = null, @usd = @usdout OUT
--Use received value in normal SELECT
select *, @usdout from ...

对于多行运行,请在此处检查可能的方法:How do I execute a stored procedure once for each row returned by query?

例如,可以使用游标,在每个循环中在临时表中插入新数据然后加入。

答案 1 :(得分:0)

将SP结果插入临时表:

create table #t (result ...)
declare @date datetime = getdate()
declare @usd money
insert into #t exec [dbo].[pr_MySP] @date = @date, @usd = @usd output
select * from #t

答案 2 :(得分:0)

您不必像sp那样将功能作为一列执行

CREATE FUNCTION fn_Function (@Id)
(   
    -- Add the parameters for the function here
    @param varchar(1000)
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT @param as Value
)
GO

然后您可以将sp写为

SELECT *,fn_Function(TBL.Id)FROM tbl_Table TBL