首页 > 解决方案 > 在另一个存储过程中使用存储过程中的值

问题描述

因此,在我正在处理的项目中,有一个存储过程(我们将称之为SP_Premium),它可以获取我需要的一些值,包括一个Premium数字。

我发现我不能使用 Linq to EF 来解决我的问题,所以我应该使用存储过程。

这里的问题是,我需要新存储过程中的Premium数字。SP_Premium

如何将其添加SP_Premium到我自己的存储过程中并取出所有值?

ALTER PROCEDURE [dbo].[SP_Premium]
 @RequestId int = 104622
AS

BEGIN
declare @precision int = 10

select 
     P.Premium
     P.ONP
    ,P.ONEP
    ,P.retention
    ,P.retentionValue
    ,P.retentionValueEndorsement
    ,P.OCP
    ,P.OCEP
    ,P.cededShare
    ,T.amount
    ,T.endorsementAmount
    ,T.cededAmount
    ,T.cededEndorsementAmount
    ,RC.cost
    ,RC.endorsementCost
 from requestbackoffice bo
    cross apply [dbo].[Report_Get_BO_original_premium](@RequestId,@precision) P
    outer apply [dbo].[Report_Get_BO_taxes](@RequestId,@precision) T
    outer apply [dbo].[Report_Get_BO_reinsurance_costs](@RequestId,@precision) RC
 where bo.requestId=@requestId
END

标签: tsqlstored-procedures

解决方案


在新的存储过程中,您可以只执行现有过程并将结果保存在那里以用于该新代码。

如果是我,我会先从SP_Premium(注意:避免命名用户存储过程 SP% 或 SP_%)执行现有查询,使用INTO子句创建表,然后使用管理工作室编写生成的表。使用该脚本在您的新过程中生成一个临时表。这是正确获取所有数据类型的懒惰方式。

所以,伪编码看起来像这样:

CREATE PROCEDURE usp_NewProc
AS

BEGIN

  IF OBJECT_ID('tempdb..#InterimTable','U') IS NOT NULL
    DROP TABLE #InterimTable;

  CREATE TABLE #InterimTable(
  <using the script that SSMS made for you>
  );

  DECLARE @ParamVariable INT;

  SELECT @ParamVariable = <Code to assign a parameter value>;

  INSERT INTO #InterimTable (<Field List>)
  EXECUTE SP_Premium @RequestID = @ParamVariable;

  <Carry on with whatever else you need to do>;

  --Arguably unnecessary, but I like to clean up after myself
  IF OBJECT_ID('tempdb..#InterimTable','U') IS NOT NULL
    DROP TABLE #InterimTable;

END;

推荐阅读