[英]SSIS how to pass Table-Value parameter into stored procedure
互聯網上有很多關於在SSIS中傳遞Table-Value參數的文章,但我想知道它們都太舊了而且錯得太復雜了,因為它們希望完成腳本組件或許多其他事情。
問題是。
如何最有效,最快地做到這一點
假設表值參數定義為類型
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.