SSIS записывает переменную динамического набора результатов в таблицу MSSQL - PullRequest
0 голосов
/ 13 февраля 2019

Я создаю приложение SSIS, которое записывает результаты динамического SQL (читай: номер переменной и имена столбцов) в переменную ComObject с именем User::ResultSet.

Теперь я хочу создать задачу SSIS, которая отбрасываетсятаблица testTable, если она существует, затем считывает переменную ComObject и вставляет ее в таблицу testTable в MSSQL Server.По сути, я хочу сделать следующее:

DROP TABLE IF EXISTS dbo.testTable;

SELECT *
INTO dbo.testTable
FROM [User::ResultSet]

Возможно ли это в SSIS 2015, не зная типы, имена и количество столбцов в ComObject?

1 Ответ

0 голосов
/ 13 февраля 2019

Ну, обычный SSIS без объектов сценария не может этого сделать.Служба SSIS ориентирована на метаданные, она должна знать имена и типы столбцов перед запуском пакета.Среда выполнения служб SSIS не позволяет изменять определение метаданных на лету.

Тем не менее, вы можете делать то, что вы хотите в Script Task.Вот подход:

  1. Тип объекта Переменная, используемая ComObject с полным набором результатов, равна либо ADO Recordset (если вы использовали OLEDB Connection Manager), либо ADO DataSet (если вы использовалиADO.NET CM).В первом случае преобразуйте ADO Recordset в ADO DataTable с аналогичным кодом.

    using System.Data.OleDb;  
    
    public void Main()
    {
        DataTable dt = new DataTable();
        OleDbDataAdapter oleda = new OleDbDataAdapter();
        oleda.Fill(dt, this.Variables.ObjectVariable);   
    
  2. Затем, заполнив объект DataTable значениями и метаданными, вы можете создать инструкцию SQL Create Table и затем выполнить массовую вставку данных из DataTable.Вот отличный пример кода .

Ваша задача сценария создаст таблицу SQL на основе метаданных из DataTable, а затем скопирует ее содержимое во вновь созданную таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...