Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да картографирате входните и изходните колони динамично в SSIS?

Ако създадете подобна таблица, можете да я използвате в 2 подхода за динамично картографиране на колони в пакета SSIS или трябва да изградите целия пакет програмно. В този отговор ще се опитам да ви дам някои идеи как да направите това.

(1) Изграждане на изходна SQL команда с псевдоними

Забележка:Този подход ще работи само ако всички .dbf файлове имат еднакъв брой колони, но имената са различни

При този подход ще генерирате SQL командата, която ще се използва като източник на базата на FileID и таблицата за съпоставяне, която сте създали. Трябва да знаете дали FileID и .dbf File Path се съхраняват в променлива. като пример:

Ако приемем, че името на таблицата е inputoutputMapping

Добавете Изпълнение на SQL задача със следната команда:

DECLARE @strQuery as VARCHAR(4000)

SET @strQuery = 'SELECT '

SELECT @strQuery = @strQuery + '[' + InputColumn + '] as [' + OutputColumn + '],'
FROM inputoutputMapping
WHERE FileID = ?

SET @strQuery = SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + CAST(? as Varchar(500))

SELECT @strQuery

И в раздела за съпоставяне на параметри изберете променливата, която съдържа FileID, който да бъде съпоставен с параметъра 0 и променливата, която съдържа името на .dbf файла (алтернатива на името на таблицата) към параметъра 1

Задайте типа ResultSet на Single Row и съхранявайте ResultSet 0 вътре в променлива от тип низ като пример @[User::SourceQuery]

Стойността на ResultSet ще бъде както следва:

SELECT [CustCd] as [CustCode],[CNAME] as [CustName],[Address] as [CustAdd] FROM database1

В OLEDB Source изберете режима на достъп до таблицата до командата SQL от променлива и използвайте @[User::SourceQuery] променлива като източник.

(2) Използване на компонент на скрипт като източник

При този подход трябва да използвате компонент на скрипт като източник в задачата за поток от данни:

Първо, трябва да предадете пътя на .dbf файла и връзката към SQL Server към компонента на скрипта чрез променливи, ако не искате да ги кодирате.

Вътре в редактора на скриптове трябва да добавите изходна колона за всяка колона, намерена в таблицата на местоназначението и да ги съпоставите с местоназначението .

Вътре в скрипта трябва да прочетете .dbf файла в таблица с данни:

  • C# Чете от .DBF файлове в таблица с данни
  • Заредете DBF в DataTable

След като заредите данните в таблица с данни, попълнете и друга таблица с данните, намерени в MappingTable, която сте създали в SQL Server.

След това обиколете колоните на таблицата с данни и променете .ColumnName към съответната изходна колона, като пример:

foreach (DataColumn col in myTable.Columns)
    {

    col.ColumnName = MappingTable.AsEnumerable().Where(x => x.FileID = 1 && x.InputColumn = col.ColumnName).Select(y => y.OutputColumn).First(); 

    }

След цикъл през всеки ред в таблицата с данни и създайте изходен ред на скрипт.

Освен това, имайте предвид, че докато присвоявате изходни редове, трябва да проверите дали колоната съществува, първо можете да добавите имена на всички колони към списък с низове, след което да го използвате, за да проверите, като пример:

var columnNames = myTable.Columns.Cast<DataColumn>()
                             .Select(x => x.ColumnName)
                             .ToList();  


foreach (DataColumn row in myTable.Rows){

if(columnNames.contains("CustCode"){

    OutputBuffer0.CustCode = row("CustCode");

}else{

    OutputBuffer0.CustCode_IsNull = True

}

//continue checking all other columns

}

Ако имате нужда от повече подробности относно използването на компонент на скрипт като източник, проверете една от следните връзки:

  • Компонент на SSIS скрипт като източник
  • Създаване на източник с компонента на скрипта
  • Компонент на скрипт като източник – SSIS
  • SSIS – ИЗПОЛЗВАНЕ НА СКРИПТОВ КОМПОНЕНТ КАТО ИЗТОЧНИК

(3) Динамично изграждане на пакета

Не мисля, че има други методи, които можете да използвате, за да постигнете тази цел, освен че имате избора да изградите пакета динамично, тогава трябва да отидете с:

  • BIML
  • Управляван обектен модел на Integration Services
  • Библиотека EzApi

(4) SchemaMapper:библиотека с класове за картографиране на схеми на C#

Наскоро започнах нов проект на Git-Hub, който е библиотека с класове, разработена с помощта на C#. Можете да го използвате за импортиране на таблични данни от excel, word, powerpoint, текст, csv, html, json и xml в таблица на SQL сървър с различна дефиниция на схема, използвайки подхода за картографиране на схема. проверете го на:

  • SchemaMapper:библиотека на класове за картографиране на схема на C#

Можете да следвате тази Wiki страница за ръководство стъпка по стъпка:

  • Импортирайте данни от множество файлове в една SQL таблица стъпка по стъпка ръководство



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Множество реда до една стойност, разделена със запетая, в Sql Server

  2. как да пропуснете лош ред в ssis плосък файлов източник

  3. Разделете думи с главна буква в sql

  4. ПРОВЕРЯТЕ Ограниченията в SQL Server

  5. Как да изберете вложен JSON в SQL Server с OPENJSON