Этого можно добиться в SSIS, используя Unpivot Transformation
, доступное в Data Flow Task
. Следующий пример иллюстрирует, как это можно сделать. В примере используются базы данных SSIS 2008 R2
и SQL 2008 R2
.
Пошаговый процесс:
Создайте файл Excel с образцами данных, как показано на скриншоте # 1 . Я назвал файл как Source.xlsx .
Создайте таблицу в базе данных SQL Server с именем dbo.Destination
, используя скрипт, указанный в разделе Сценарии SQL . Эта таблица будет заполнена данными Excel. Я ввел новое поле с именем GroupId , чтобы данные можно было группировать вместе.
В пакете служб SSIS создайте соединение Excel с именем Excel и соединение OLE DB с именем SQLServer, как показано на снимке экрана # 2 . Excel connection manager
должен быть настроен, как показано на скриншоте # 3 . Соединение OLE DB будет настроено для подключения к базе данных по вашему выбору.
На вкладке Control Flow
пакета поместите Data Flow Task
, как показано на скриншоте # 4 .
Настройте вкладку «Поток данных», как показано на скриншоте # 5 с Excel source
, Script component
, Unpivot transformation
и OLE DB destination
.
Настройте Excel Source
, как показано на скриншотах # 6 и # 7 . Это будет читать данные из файла Excel.
Настройте Script Component
как Преобразование и добавьте столбец Output
, как показано на скриншоте # 8 . В разделе Script
нажмите Edit Script
и замените код на код, указанный в разделе Код компонента сценария .
Настройте преобразование Unpivot, как показано на скриншоте # 9 . Мы не хотим преобразовывать GroupId , поэтому не настраивайте его, а сделайте его Pass Through
.
Настройте OLE DB destination
, как показано на скриншотах # 10 и # 11 .
Снимок экрана # 12 показывает данные в таблице dbo.Destination
до выполнения пакета.
Снимок экрана # 13 показывает выполнение пакета.
Снимок экрана # 14 показывает данные в таблице dbo.Destination
после выполнения пакета.
Надеюсь, это поможет.
Сценарии SQL:
CREATE TABLE [dbo].[Destination](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NULL,
[Type] [nvarchar](255) NULL,
[GroupId] [int] NULL,
CONSTRAINT [PK_Destination] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO
Код компонента скрипта:
C # код, который можно использовать только в SSIS 2008 or above
.
/* Microsoft SQL Server Integration Services Script Component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
int groupId = 1;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
Row.GroupId = groupId;
groupId += 1;
}
}
Скриншот №1:
Скриншот №2:
Скриншот № 3:
Снимок экрана № 4:
Скриншот № 5:
Снимок экрана № 6:
Снимок экрана № 7:
Скриншот № 8:
Снимок экрана № 9:
Снимок экрана № 10:
Скриншот № 11:
Снимок экрана № 12:
Снимок экрана № 13:
Снимок экрана № 14: