如何使用Execute SQL Task通过SSIS在定义上运行具有自定义类型变量的SP

时间:2018-10-30 14:21:25

标签: sql sql-server ssis ssis-2012

我在SQL Server中有一个存储过程,如下所示:

CREATE PROCEDURE [dbo].[spReporting] 
   @DateCreated_Start datetime,
   @DateCreated_Finish datetime,
   @DeadlineDate datetime = NULL,
   @Duration [NumericTableType] READONLY,
   @ValueCheck [StringTableType] READONLY
AS
BEGIN
....
END

可以看到,变量可以有两种自定义类型,NumericTableTypeStringTableType

我要做的是使用“控制流”中的“执行SQL任务”在SSIS中执行存储过程。我使用的execute命令(SQL语句)为:exec spReporting ?,?,?,?,?但是,由于自定义参数未在“参数映射”部分中定义,因此我不知道如何给参数。

我尝试更改SQL语句,例如:exec [dbo].[spReporting_AP] ?,?,null,null,null,但没有帮助。除非必须,否则我不想为此使用脚本任务。任何建议/帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

两个自定义类型都是表类型吗?如果是这样,则可以使用程序包中先前任务中加载的 global 临时表来填充相同类型的变量,然后使用该变量执行存储过程。为了使包中的其他组件可以访问全局临时表,必须在包上将TransactionOption设置为Required,并在包中将SupportedRequired设置为涉及的对象。如果要将此项工作隔离到包装的特定部分,请将所有涉及的组件放在同一序列容器中,并在其中应用相同的TransactionOption设置。您将不需要使用参数来执行此操作,下面的示例说明了在填充相同类型的变量之后执行存储的过程的方法。

DECLARE @TableParameter AS YourTableType

INSERT INTO @TableParameter (Column1, Column2)
SELECT Column1, Column1 FROM ##TempTable

EXEC dbo.testsp @TableParameter

答案 1 :(得分:0)

一些实现方法:

  1. 在SQL语句中初始化自定义类型变量。这是通过在执行SP之前将自定义类型变量的数据存储在某些SQL表中来完成的。然后创建一个 Execute SQL 任务,该任务:
    • 创建自定义类型的变量
    • 使用SELECT INTO语句填充变量
    • 执行SP

可以使用字符串变量dynamic evaluation with expression的技术来传递诸如DateCreated_Start之类的参数。

  1. 使用所有参数等调用SP的脚本任务。