簡體   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