tsql - 在另一个存储过程中使用存储过程中的值
问题描述
因此,在我正在处理的项目中,有一个存储过程(我们将称之为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
解决方案
在新的存储过程中,您可以只执行现有过程并将结果保存在那里以用于该新代码。
如果是我,我会先从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;
推荐阅读
- python - 如何保护我的 ren'py 项目不被复制?
- clickhouse - clickhouse 是否提供任何工具,例如 red gate sql toolbelt
- linux - 在 apache 配置中未显示预期输出
- node.js - 为什么我不能将 @bundled-es-modules/chai 别名为 chai?
- python - 在 Matplotlib 中同时使用 blitting 为一个子图设置动画,而在 Matplotlib 中通过重绘为另一个子图设置动画
- windows-10 - 在 Power Automate Desktop 中获取列表中的第一项
- r - 在样本中添加值
- javascript - parcel serve 为 SourceMap 请求和不存在的 url 返回 index.html
- python - 如果我在 Django 项目中创建和使用批处理文件,则没有名为错误的模块
- python - 以下人工神经网络的输入层节点数是多少?