【发布时间】:2020-07-18 19:59:38
【问题描述】:
我在 SQL Server 2012 中有以下存储过程:
USE [GESTAO_ATUARIAL]
GO
CREATE PROCEDURE [Atuaria].[CalcularFatorMensalizacaoTeste] @taxaJuros NUMERIC(7, 4) AS
-- Variaveis
DECLARE @woolhouse DECIMAL(16, 15) = 0.458333333333333;
-- Fator de mensalização usa apenas tábua de mortalidade e taxa de juros
;WITH cte AS (
-- Âncora
SELECT
Idade,
CAST(Feminino AS NUMERIC(28, 25)) AS qxFeminino,
CAST(1.0 AS NUMERIC(28, 25)) AS vx,
CAST(1.0 AS NUMERIC(28, 25)) AS lxFeminino,
CAST(Masculino AS NUMERIC(28, 25)) AS qxMasculino,
CAST(1.0 AS NUMERIC(28, 25)) AS lxMasculino
FROM Atuaria.RP2000SuavizadaMenos20 AS rp
WHERE Idade = 0
-- Parte recursiva
UNION ALL
SELECT
cte.Idade + 1,
CAST(Feminino AS NUMERIC(28, 25)),
CAST((vx / (1 + @taxaJuros)) AS NUMERIC(28, 25)),
CAST((lxFeminino * (1 - qxFeminino)) AS NUMERIC(28, 25)),
CAST(Masculino AS NUMERIC(28, 25)),
CAST((lxMasculino * (1 - qxMasculino)) AS NUMERIC(28, 25))
FROM Atuaria.RP2000SuavizadaMenos20 AS rp
JOIN cte
ON cte.Idade + 1 = rp.Idade
WHERE cte.Idade < 120
),
-- Cálculo de Dx
cte2 AS (
SELECT
cte.Idade,
CAST(vx * lxFeminino AS NUMERIC(28, 25)) AS DxFeminino,
CAST(vx * lxMasculino AS NUMERIC(28, 25)) AS DxMasculino
FROM cte
)
-- Cálculo dos fatores de mensalização feminino e masculino
SELECT
Idade,
CAST(1.0 AS NUMERIC(28, 25)) - @woolhouse /
(SUM(DxFeminino) OVER (ORDER BY Idade ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) / NULLIF(DxFeminino, 0)) AS FatorMensalizacaoFeminino,
CAST(1.0 AS NUMERIC(28, 25)) - @woolhouse /
(SUM(DxMasculino) OVER (ORDER BY Idade ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) / NULLIF(DxMasculino, 0)) AS FatorMensalizacaoMasculino
FROM cte2 OPTION (MAXRECURSION 0)
上述过程使用 CTE 生成一个包含 121 行和 3 列的表。它以利率为单一参数,使用死亡率表计算一些精算变量。
我使用 SSIS 来运行所有复杂的计算,它可以工作,但是我使用这个特定过程的方式在数据库中创建了很多表,我想简化一下。
我目前正在做的是复制 CTE 的代码来为每个福利计划(总共 11 个)创建一个程序。它是相同的代码,但在不同的存储过程中。
我没有将结果传递给 SSIS 对象变量,而是创建了一个表来存储每个福利计划的结果:
;WITH cte AS (
) SELECT * FROM cte INTO MyBenefitPlan1
因此,我有 11 个存储过程在做同样的事情,只是生成不同的表,因为每个计划都有不同的利率。
之后,我使用另一个执行 SQL 任务来检索 CTE 在存储过程中创建的表,然后将结果集传递给 SSIS 对象变量。
我需要知道的是如何从执行 SQL 任务中执行这个存储过程,并将其结果直接传递给 SSIS 对象变量。
我使用 ADO.NET 作为连接管理器。
【问题讨论】:
标签: sql-server stored-procedures ssis ado.net