我在SQL Server中有一个存储过程,如下所示:
CREATE PROCEDURE [dbo].[spReporting]
@DateCreated_Start datetime,
@DateCreated_Finish datetime,
@DeadlineDate datetime = NULL,
@Duration [NumericTableType] READONLY,
@ValueCheck [StringTableType] READONLY
AS
BEGIN
....
END
可以看到,变量可以有两种自定义类型,NumericTableType
和StringTableType
。
我要做的是使用“控制流”中的“执行SQL任务”在SSIS中执行存储过程。我使用的execute命令(SQL语句)为:exec spReporting ?,?,?,?,?
但是,由于自定义参数未在“参数映射”部分中定义,因此我不知道如何给参数。
我尝试更改SQL语句,例如:exec [dbo].[spReporting_AP] ?,?,null,null,null
,但没有帮助。除非必须,否则我不想为此使用脚本任务。任何建议/帮助将不胜感激。
答案 0 :(得分:0)
两个自定义类型都是表类型吗?如果是这样,则可以使用程序包中先前任务中加载的 global 临时表来填充相同类型的变量,然后使用该变量执行存储过程。为了使包中的其他组件可以访问全局临时表,必须在包上将TransactionOption
设置为Required
,并在包中将Supported
或Required
设置为涉及的对象。如果要将此项工作隔离到包装的特定部分,请将所有涉及的组件放在同一序列容器中,并在其中应用相同的TransactionOption
设置。您将不需要使用参数来执行此操作,下面的示例说明了在填充相同类型的变量之后执行存储的过程的方法。
DECLARE @TableParameter AS YourTableType
INSERT INTO @TableParameter (Column1, Column2)
SELECT Column1, Column1 FROM ##TempTable
EXEC dbo.testsp @TableParameter
答案 1 :(得分:0)
一些实现方法:
可以使用字符串变量dynamic evaluation with expression的技术来传递诸如DateCreated_Start
之类的参数。