Internet上有很多关于在SSIS中传递Table-Value参数的文章,但是我想知道它们都太旧了而且错得太复杂了,因为他们希望脚本组件或许多其他事情可以完成。 / p>
问题就这样。
如何最有效,最快地做到这一点
假设表值参数定义为类型
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
答案 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