SSIS如何将表值参数传递到存储过程

时间:2018-09-24 10:14:01

标签: c# sql-server ssis table-valued-parameters

Internet上有很多关于在SSIS中传递Table-Value参数的文章,但是我想知道它们都太旧了而且错得太复杂了,因为他们希望脚本组件或许多其他事情可以完成。 / p>

问题就这样。

  1. 如何将Table-Value参数传递到ADO.NET Source。
  2. 如何将表值参数传递到OLE DB源。

如何最有效,最快地做到这一点

假设表值参数定义为类型

CREATE TYPE [dbo].[IDs_TVP] AS TABLE(
    [ID] [INT] NOT NULL
)

可以调用过程

DECLARE @ID dbo.IDs_TVP
INSERT INTO @Clients
(
    Text
)
VALUES 
('1'),
('1'),
('3')

EXEC dbo.GetClients  @Clients = @Clients

和定义的过程

CREATE PROCEDURE [dbo].[GetClients]

    @Clients dbo.IDs_TVP READONLY
AS

SELECT * FROM @Clients

1 个答案:

答案 0 :(得分:2)

我不确定此选项比脚本任务的详细程度少多少,但是如果需要使用表值参数将数据传递到存储过程中,请在包中,您可以将数据加载到全局临时表中以进行必要的处理。准备好使用表值参数将数据发送到存储过程后,填充与TVP类型相同的T-SQL变量,并以该变量作为TVP参数执行存储过程。为此,请确保将所有相关任务放在TransactionOption设置为Required的序列容器中。这些组件既可以在受支持的地方TransactionOption,也可以将其设置为必需。如果包中的所有组件都与此特定目标/数据相关,则可以省略“序列”容器,而将相同的TransactionOption设置应用于该包。如果此方法对您有效,则您可能需要考虑从存储过程中删除TVP,而仅使用临时表。下面是一个执行SQL任务的示例,该示例填充temp表中的表类型变量,然后以该参数为参数执行存储过程。这将与OLE DB和ADO.NET连接一起使用

DECLARE @YourParameter AS IDs_TVP

INSERT INTO @YourParameter (ID)
SELECT ID FROM ##TempTable

EXEC dbo.TestSP @YourParameter

DROP TABLE ##TempTable