【问题标题】:How to return or get output value from stored procedure which is executing inside another proceed如何从另一个进程中执行的存储过程返回或获取输出值
【发布时间】:2014-05-20 20:14:23
【问题描述】:

我有以下存储过程:

ALTER PROCEDURE [dbo].[spRptFundsTransferSchoolProfileSelect]          
(          
    @SessionID int ,      
    @DateRangeStart DateTime,       
    @DateRangeEnd DateTime       
)          
AS          
BEGIN        
 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED     


    --set @SessionID = 1175      

    SELECT  tss.school_id,           
            ts.school_code,          
            tss.id,           
            ts.school_name,           
            ta.address,           
            ta.city,           
            ta.zip,            

    FROM T_School ts           

    Execute [dbo].[spRptFundsTransferPaymentSummarySelect]     @SessionID ,      
                                                               @DateRangeStart ,       
                                                               @DateRangeEnd       
END 

以及返回输出的模型:

namespace FundTr.de
{
    public class FundTrans : ModelBase
    {
        public string school_name { get; set; }

        public string school_code { get; set; }

        public int school_id { get; set; }

        public long id { get; set; }

        public string address { get; set; }

        public string city { get; set; }

        public string zip { get; set; }

        public string Date_Added { get; set; }//from dbo.spRptFundsTransferPaymentSummarySelect procedure

    }
}

控制器:

public ActionResult GetFundTransferReportTemplate(DateTime DateRangeStart, DateTime DateRangeEnd)
        {
            return SmartJson(ReportService.GetFundTransferReportTemplate(DateRangeStart, DateRangeEnd));

        }

服务:

 public static FundTransferReportTemplate GetFundTransferReportTemplate(DateTime DateRangeStart, DateTime DateRangeEnd)
        {
            long SessionID = 1175;// SmartState.session.schoolSession.SessionId;
            var repo = GetRepository<FundTransferReportTemplate>();
            var da = repo.GetSingleObject("spRptFundsTransferSchoolProfileSelect", new { DateRangeStart, DateRangeEnd, SessionID });
            return da;

        }

当我点击控制器时,我得到除了最后一个“Date_Added”之外的所有值(此字段来自过程 dbo.spRptFundsTransferPaymentSummarySelect)。 我的意思是说我没有得到 dbo.spRptFundsTransferPaymentSummarySelect 的输出值。我怎么能得到 访问在主过程中执行的过程的输出值?

【问题讨论】:

    标签: asp.net sql-server stored-procedures


    【解决方案1】:

    SP自上而下执行,从某种意义上说,它会执行SELECT语句,然后执行SPspRptFundsTransferPaymentSummarySelect。假设 SP spRptFundsTransferPaymentSummarySelect 返回单个值,即 date_added

    您需要先调用 spRptFundsTransferPaymentSummarySelect 并将值存储在变量 @Date_Added 中,然后在 SELECT 语句中使用它。

    ALTER PROCEDURE [dbo].[spRptFundsTransferSchoolProfileSelect]
    (
        @SessionID int,
        @DateRangeStart DateTime,
        @DateRangeEnd DateTime
    )
    AS
    BEGIN
        SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
        DECLARE @Date_Added DateTime
    
        Execute @Date_Added = [dbo].[spRptFundsTransferPaymentSummarySelect] @SessionID,
                                                                    @DateRangeStart,
                                                                    @DateRangeEnd
    
        --set @SessionID = 1175
    
        SELECT tss.school_id,
            ts.school_code,
            ts.id,
            ts.school_name,
            ta.address,
            ta.city,
            ta.zip,
            @Date_Added AS Date_Added
        FROM T_School ts
    END 
    

    【讨论】:

    • 如果第一个 SP 返回多个记录,您将需要使用 CURSORS 进行最终输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多