繁体   English   中英

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

[英]SSIS how to pass Table-Value parameter into stored procedure

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

问题是。

  1. 如何将Table-Value参数传递到ADO.NET源。
  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

我不确定此选项比脚本任务要少多少详细信息,但是如果您需要使用表值参数将数据传递到存储过程中,请在包中的多个组件中使用此数据后,可以将数据加载到全局临时表以执行任何必要的处理。 准备好使用表值参数将数据发送到存储过程后,填充与TVP类型相同的T-SQL变量,并以该变量作为TVP参数执行存储过程。 为此,请确保将所有相关任务放在TransactionOption设置为Required的序列容器中。 这些组件可以将其TransactionOption设置为Supported,也可以将其设置为Required。 如果包中的所有组件都与此特定目标/数据相关,则可以省略Sequence容器,而将相同的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM