SSIS从第一列中的列名称的excel中导入

我有一个Excel工作簿,其中有许多工作表。 每个工作表都有表示模式的数据。 问题是数据不是用一个标题行来布局的,而是它有一个标题“列” 。 数据也只包含在表格的第7到第13行,即:

Field Name | Swap ID | Allocation ID | Description | Broker ID ... Field Type | Alphanumeric| Alphanumeric | Alphanumeric| Alphanumeric ... Field Length| char(40) | char(40) | char(100) | char(50) .... ... 

如何将这些工作表之一导入到具有以下结构的数据库表中?

 Field Name | Field Type | Field Length | ... 

注:我的问题不仅仅是跳过行内容,而是如何“旋转”数据,使得按列布置的数据按行排列。

编辑:由于praveen的答案我能够处理使用特定范围的单元格的使用Select * from [Sheet$A7:AZ13]语法的要求,但导入数据的主要问题,基本上打开它的一面仍然存在。

尝试这个 :-

步骤1:在创buildExcel Connection Manager ,selectFirst Rows as Column name

步骤2:在Excel源中,使用SQL Command进行Data access mode并写入查询以跳过初始行

 SELECT * FROM [Sheet1$A7:B] 

在一个Excel表单和另一个Excel表单之间可能会有很多事情可能发生变化。 所以,只能将此解决scheme作为开始点。 如果您有任何问题,请告诉我们。 ( – ;免责声明;-)

我创build了一个如下所示的Excel文件:

字段名称| 交换ID | 分配ID | 说明| 经纪人ID

字段types| 字母数字| 字母数字| 字母数字| 字母数字

字段长度| char(40)| char(40)| char(100)| 炭(50)

  1. 将您的Excel文件加载到登台表(STG_Sheet1)中。

CREATE TABLE [dbo]。[STG_Sheet1](
[F1] varchar NULL,[F2] varchar NULL,[F3] varchar NULL,[F4] varchar NULL,[F5] varchar NULL)ON [PRIMARY]

现在,创build一个新的SSIS包。

2.1创build以下variables:

 2.1.1 oFieldList; Data type: Object 2.1.2 sColumn; Data type: String, Value: F2 2.1.3 sSql; Data type: String, Value: "SELECT " + @[User::sColumn] + " AS COL FROM [dbo].[STG_Sheet1]" 2.1.4 sSQLInsert; Data type: String 2.1.5 sValues; Data type: String 

2.2放置脚本任务。

 2.2.1 Result Set: Full result set 2.2.2 SQL Statement: SELECT sac.name as ColumnName FROM sys.all_columns sac INNER JOIN sys.all_objects sao ON sao.object_id = sac.object_id WHERE sao.name = 'STG_Sheet1' AND sac.name <> 'F1' 2.2.3 Result Set: Result Name: 0; Variable Name: User::oFieldList 

2.3放置一个ForEach循环容器

 2.3.1 Enumerator: Foreach ADO Enumerator 2.3.2 ADO object source variable: User::oFieldList 2.3.3 Variable Mappings: User::sColumn: 0 

现在,在ForEach循环容器中

2.4放置一个DFT

 2.4.1 Place an OLE DB Source 2.4.1.1 Data access mode: SQL Command from variable 2.4.1.2 Variable name: sSQL 2.4.1.3 Columns: COL 2.4.2 Place a Script component as Transformation 2.4.2.1 Input Columns: COL : ReadOnly 2.4.2.2 Script: ReadWrite Variables:User::sValues 2.4.2.3 Edit Script : Code below public class ScriptMain : UserComponent { string colValue = string.Empty; public override void PreExecute() { base.PreExecute(); } public override void PostExecute() { base.PostExecute(); string x = Variables.sValues; int iFirstCommaAt = colValue.IndexOf (','); colValue = colValue.Substring(iFirstCommaAt + 1); Variables.sValues = colValue; } public override void Input0_ProcessInputRow(Input0Buffer Row) { string x = Row.COL; colValue = string.Format("{0},'{1}'", colValue, x); } } 

2.5放置脚本任务:

 2.5.1 ReadOnlyVariables: User::sValues 2.5.2 ReadWriteVariables: User::sSQLInsert 2.5.3 Edit Script: Code below public void Main() { string s = "INSERT INTO dbo.SHEET1 ([Field Name], [Field Type], [Field Length]) VALUES "; string sValue = Dts.Variables["User::sValues"].Value.ToString(); string sSQLInsert = string.Empty; Dts.Variables["User::sSQLInsert"].Value = string.Format("{0} ({1})", s, sValue); Dts.TaskResult = (int)ScriptResults.Success; } 

2.6放置一个执行SQL任务

 2.6.1 SQLSourceTyoe: Variable 2.6.2 SourceVariable: User::sSQLInsert 

您也可以尝试以下操作:(将Excel工作表加载到登台表后,从SSMS运行以下脚本:

 SELECT * FROM [dbo].[STG_Sheet1] SELECT * FROM [dbo].[Sheet1] DECLARE @CETList2 varchar(300); DECLARE @CETList3 varchar(300); DECLARE @CETList4 varchar(300); DECLARE @CETList5 varchar(300); DECLARE @INSERT varchar(1000) DECLARE @EXEC_INSERT varchar(1000); SET @INSERT = 'INSERT INTO dbo.SHEET1 ([Field Name], [Field Type],[Field Length]) VALUES'; SELECT @CETList2 = COALESCE(@CETList2 + ',', '') + '''' + LTRIM(RTRIM(CAST(CETL.[F2] AS Varchar))) + '''' , @CETList3 = COALESCE(@CETList3 + ',', '') + '''' + LTRIM(RTRIM(CAST(CETL.[F3] AS varchar))) + '''' , @CETList4 = COALESCE(@CETList4 + ',', '') + '''' + LTRIM(RTRIM(CAST(CETL.[F4] AS varchar))) + '''' , @CETList5 = COALESCE(@CETList5 + ',', '') + '''' + LTRIM(RTRIM(CAST(CETL.[F5] AS varchar))) + '''' FROM [dbo].[STG_Sheet1] CETL SET @EXEC_INSERT = @INSERT + '(' + @CETList2 + ')'; EXECUTE (@EXEC_INSERT) SET @EXEC_INSERT = @INSERT + '(' + @CETList3 + ')'; EXECUTE (@EXEC_INSERT) SET @EXEC_INSERT = @INSERT + '(' + @CETList4 + ')'; EXECUTE (@EXEC_INSERT) SET @EXEC_INSERT = @INSERT + '(' + @CETList5 + ')'; EXECUTE (@EXEC_INSERT) SELECT * FROM [dbo].[Sheet1]