【问题标题】:TSQL stored procedure result as column in another selectTSQL 存储过程结果作为另一个选择中的列
【发布时间】:2019-07-09 19:49:09
【问题描述】:

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

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

这个存储过程调用另一个存储过程,所以我不能创建 UDF 来做它。现在我需要将此 proc 结果用作另一个选择中的列。像这样的

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

有什么办法吗?

【问题讨论】:

    标签: tsql stored-procedures


    【解决方案1】:

    对于一个 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?

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

    【讨论】:

    • 我需要主查询每一行的日期参数
    • 请解释你做了什么编辑答案,避免只用代码回答
    【解决方案2】:

    将 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
    

    【讨论】:

      【解决方案3】:

      您必须将函数作为列执行,而不是 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
      

      【讨论】:

        猜你喜欢
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        相关资源
        最近更新 更多