Sql server 使用SSIS加载不同语言的Excel文件

Sql server 使用SSIS加载不同语言的Excel文件,sql-server,tsql,ssis,Sql Server,Tsql,Ssis,我有86个国家,每个国家都有一个文件夹放在CountryFolder中:例如 C:\Users\Countries\Algeria 在每个国家/地区文件夹中,都有一张该国语言的Excel表格: C:\Users\Countries\Algeria\Excel Sheet.xlsx 我有一个ForEach循环包,它遍历所有国家,从Excel表格中提取数据。这些工作表的格式相同,但语言不同。 我的SSIS包运行于所有将图纸加载到数据库中的英国国家,但在加载到西班牙语和其他非英语国家时会抛出一个错

我有86个国家,每个国家都有一个文件夹放在CountryFolder中:例如

C:\Users\Countries\Algeria
在每个国家/地区文件夹中,都有一张该国语言的Excel表格:

C:\Users\Countries\Algeria\Excel Sheet.xlsx
我有一个ForEach循环包,它遍历所有国家,从Excel表格中提取数据。这些工作表的格式相同,但语言不同。
我的SSIS包运行于所有将图纸加载到数据库中的英国国家,但在加载到西班牙语和其他非英语国家时会抛出一个错误,因为它使用列名进行映射。表列名是英文的,因此它们与非英语国家的Excel列名不匹配

我假设您有一个
ForEach
循环来迭代
文件夹
。在
ForEach循环中
使用
文件系统
任务将特定文件复制到不同的位置。然后在
脚本的帮助下任务
读取原始Excel文件,并将列HEDER更改为英文名称,以便您的
数据流任务
适用于所有具有不同
语言的Excel

 ConnString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;   
 Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";"
 ,@ForEachVariable);
注意:@ForEachVariable
包含通过
ForEach
循环存储在变量中的文件位置

//open the connection
OleDbCommand query = 
 new OleDbCommand("SELECT * FROM ["xlWorksheet"$]", objConn); 

//popluate the Datetable and get the column names using 
dt.Columns[0].ColumnName
获得列名后,在Excel中将其更改为英文名称,然后使用
DFT

包装设计:-

通过这种方式,您可以
重用现有的数据流任务