2016-05-27 2 views
0

Я использую SQL Server 2016.SQL Server 2016 SSIS получить курсор из хранимой процедуры

  1. У меня есть хранимая процедура GET_RECORDS, которая принимает входные параметры для фильтра и выводит параметр CURSOR

  2. Я хочу чтобы получить этот курсор в моем пакете SSIS

  3. Я создал задачу потока данных, источник OleDb и переменные для значений параметров. Затем отображенные параметры

Params mapping screen

, но когда я хотел, чтобы сохранить компонент - я получил ошибку

error screen

Я пытался добавить пункт WITH RESULT SETS с некоторыми фиктивных столбцов, но мой процедура не возвращает никакого результирующего набора

Что я делаю неправильно?

Любые советы помогут.

спасибо.

С уважением, Юрий.

+0

Я никогда не слышал о возможности вывода курсора. что-то новое в 2016 году, или это просто принятие желаемого за действительное? –

+0

Это требование.Я хочу знать, возможно ли это реализовать) –

ответ

0

Исходный компонент пытается определить, какие столбцы и типы будут возвращены. Поскольку вы используете динамический SQL, метаданные могут меняться при каждом запуске.

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

EDIT: Я создаю соединение и запускаю команду так, чтобы она заполняла таблицу данных. Затем я помещаю заголовки столбцов в строковый массив. Есть много примеров.

Затем я использую следующую функцию для создания таблицы назначения. Наконец, я создаю datareader и передаю это .Net SqlBulkCopy. Надеюсь это поможет.

private void CreateTable(string TableName, string[] Fields) 
     {     

      if (TableExists(TableName) && Overwrite) 
      { 
       SqlCommand = new SqlCommand($"Drop Table [{TableName}]", SqlConnection); 
       SqlCommand.ExecuteNonQuery(); 
      } 

      string Sql = $"Create Table [{TableName}] ("; 

      int ColumnNumber = 1; 
      foreach (string Field in Fields) 
      { 
       string FieldValue = Field; 
       if (! HasHeaders) 
       { 
        FieldValue = "Column" + ColumnNumber; 
        ColumnNumber++; 
       } 
       Sql += $"[{FieldValue}] Varchar(8000),"; 
      } 
      Sql = Sql + "ImportFileID Int, ID Int Identity(1,1) Not Null, Constraint [PK_" + TableName + "] Primary Key Clustered ([ID] Asc))"; 

      SqlCommand = new SqlCommand(Sql, SqlConnection); 
      SqlCommand.ExecuteNonQuery(); 
     } 
+0

Привет, Джо. Благодарим вас за ответ. В вашем примере есть одна статическая таблица. Но я передаю entity_name как входной параметр в процедуру, поэтому я не могу настроить статический набор результатов, потому что набор результатов зависит от выбранной таблицы сущностей. Вот почему я пытаюсь извлечь их как выходной параметр. Возможно, будет лучше выводить набор строк вместо курсора? С уважением, Юрий. –

+0

Когда я работаю с динамическими структурами в SSIS, я использую задачу скрипта. Возможно, вы сможете использовать API. Я обновляю свой ответ с помощью некоторого кода C#, который я использую при динамическом импорте xls/csv. –

0

Используйте источник ado.net вместо источника oledb, определите простой выбор и получите столбцы, которые вы хотите вернуть. Теперь вы можете определить expresión в свойствах потока данных.

Поиск источник ado.net динамический SQL

:)

+0

Не могли бы вы объяснить это чуть подробнее и как это ответ на вопрос? Изменит ли он необходимость вернуть «КУРСОР»? –