可能有很多事情可能會在一個Excel工作表和另一個Excel工作表之間發生變化。因此,只能將此解決方案用作開始點。 如果您有任何問題,請告訴我們。 ( - ;在免責聲明;-)
我創建了一個看起來像這樣的Excel文件:
字段名稱|交換ID |分配ID |說明|經紀人編號
字段類型|字母數字|字母數字|字母數字|字母數字
字段長度| char(40)| char(40)| char(100)| CHAR(50)
- 加載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]
現在,創建一個新的SSIS包。
2。1創建以下變量:
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
這確實有助於跳過行,但它不能幫助解決需要將列轉換爲行的問題(如果我的示例沒有立即將此顯而易見,我在原始文章中添加了一條註釋以說明此問題)。 – Damian 2013-04-23 16:11:36
問題:在第13行之後,工作表中是否包含格式爲FieldName |的FieldType |字段長度....? – 2013-04-24 00:17:16
編號單元格A7:A13包含列標題信息,單元格B7:AZ13包含實際數據。 – Damian 2013-04-24 12:37:53