【问题标题】:how to call nested stored procedure sql如何调用嵌套存储过程sql
【发布时间】:2013-07-06 12:54:55
【问题描述】:

我正在尝试使用第一个存储过程的结果,它为我提供了分配给特定专家的建议列表。根据该结果,我想要这些提案的相关项目。

我的第一个查询是:

ALTER proc [dbo].[sp_ExpsAssignedProp]
(  
@username as varchar(50)  
)  
as  
begin  
select pro.ProposalID,pro.Title,pro.GrantAmount from tbl_Registration reg  
inner join tbl_Expert exp On reg.RegID=exp.RegID  
inner join tbl_Panel pan On pan.ExpertID_1=exp.ExpertID   
OR pan.ExpertID_2=exp.ExpertID  
OR pan.ExpertID_3=exp.ExpertID  
inner join tbl_Association asso On asso.PanelID=pan.PanelID  
inner join tbl_Proposal pro On asso.ProposalID=pro.ProposalID  
where reg.Username=@username  
end  

现在我正在尝试将其结果用于第二个查询,但它给了我所有状态为已完成的项目。我关心的是让分配的提案的项目状态为已完成。

alter proc [dbo].sp_AssignedProj  
(  
@username as varchar(50),  
@status as varchar(50)  
)  
as  
begin  
exec sp_ExpsAssignedProp   
select proj.ProjectID, proj.Title, proj.Budget, proj.StartDate, proj.FinishDate,    proj.CurrentStatus from  
tbl_Proposal prop   
inner join tbl_Project proj On prop.ProposalID=proj.ProposalID  
where CurrentStatus=@status  
end  

【问题讨论】:

  • SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...很多事情都是特定于供应商的 - 所以我们真的需要知道您正在使用什么数据库系统(以及哪个版本)(请相应地更新标签)......
  • 附注(假设您使用的是 SQL Server):您应该为您的存储过程使用sp_ 前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免 sp_ 并使用其他东西作为前缀 - 或者根本不使用前缀!
  • @marc_s 谢谢。我不知道命名存储过程。
  • stackoverflow.com/questions/20105443/… 这可能是一个重复的问题恕我直言。但我会让你决定留下与否。

标签: sql sql-server-2012-express


【解决方案1】:

您可以使用临时(或永久)表在过程之间共享数据。

在第一个过程中,您可以设置一个临时表,例如:

CREATE TABLE #TempTableName
(
    <table definition that matches what's being inserted here>
)

然后插入你需要的任何东西:

INSERT #TempTableName EXEC myStoredProc

在第二个过程中,您可以使用数据然后删除表格:

SELECT * FROM #TempTableName (or JOIN or whatever).
DROP TABLE #TempTableName

【讨论】:

    【解决方案2】:

    当您从另一个过程执行一个过程时,您不会在调用者 SP 中获得结果集,而是将结果集传递给调用者。如果你需要使用你使用的结果集

    INSERT INTO XXX
    EXEC [sp name]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2011-04-02
      • 2011-05-10
      • 2017-05-25
      相关资源
      最近更新 更多