SSIS, как передать параметр Table-Value в хранимую процедуру - PullRequest
0 голосов
/ 24 сентября 2018

В Интернете есть несколько статей о передаче параметра Table-Value в SSIS, но мне интересно, что они все очень старые и неправильные, как слишком сложные, потому что они хотят, чтобы были выполнены компоненты скрипта или много других вещей.

Так что вопросы.

  1. Как передать параметр Table-Value в ADO.NET Source.
  2. Как передать параметр Table-Value в OLE DB Source.

Как сделать это наиболее эффективным и быстрым способом

Давайте предположим, что параметр табличного значения определен как тип

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 голосов
/ 24 сентября 2018

Я не уверен, насколько менее подробным будет этот параметр, чем задача скрипта, но если вам нужно использовать параметр с табличным значением для передачи данных в хранимую процедуру, после работы с этими данными в нескольких компонентах впакет, вы можете загрузить данные в глобальную временную таблицу, чтобы выполнить любую необходимую обработку.Когда вы будете готовы отправить данные в хранимую процедуру, используя параметр с табличным значением, заполните переменную T-SQL того же типа, что и TVP, и выполните хранимую процедуру с этой переменной в качестве параметра TVP.Для этого обязательно поместите все связанные задачи в контейнер последовательностей, для которого TransactionOption имеет значение Обязательный.Компоненты могут иметь либо TransactionOption на Поддерживаемых, либо также иметь значение Обязательные.Если все компоненты в пакете связаны с этой конкретной целью / данными, контейнер Sequence может быть опущен, и вместо него будет применяться тот же параметр TransactionOption.Если этот подход работает для вас, вы можете рассмотреть возможность удаления TVP из хранимой процедуры и просто использовать временную таблицу.Ниже приведен пример задачи «Выполнение SQL», которая заполняет переменную табличного типа из временной таблицы, а затем выполняет хранимую процедуру с этим параметром.Это будет работать с подключениями OLE DB и ADO.NET

DECLARE @YourParameter AS IDs_TVP

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

EXEC dbo.TestSP @YourParameter

DROP TABLE ##TempTable
...