在 SSIS excel 数据源中,字符数不超过 255
In SSIS excel datasource not taking more characters than 255
我开发了将多个 excel 文件导入 SQL 的 SSIS 包。现在的问题是 "Excel data source" 检查前几行以确定数据类型,我的备注栏采用了长度为 255 的文本数据类型。
但在某些文件中备注超过 255 个字符。
我查看了一些博客,他们说有意将长文本放在第一行以进行注释,然后 SSIS 会将数据类型确定为 Unicode 文本流。这解决了我的问题,但是当其他文件再次导入时,数据类型再次更改为 255 个字符并出现截断错误。
请告知如何解决此问题。
更新 - 2022-02-04:
以下答案中列出了解决方案和变通方法:
- Cannot import long text from Excel to SQL Server using SSIS
初始答案:
在数据流任务中,右键单击 Excel Source 组件,进入 Advanced Editor >> 输入和输出属性 选项卡,并在外部列和输出列中手动更改列长度,如下面的屏幕截图所示。
我已经解决了在 SSIS 脚本任务中使用以下代码导入特定列中超过 255 个字符的问题 excel。
string path = Dts.Variables["User::FileName"].Value.ToString();
FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = null;
excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
excelReader.Close();
var dt = result.Tables[0];
string CS = "Data Source=localhost;Initial Catalog=Demo;Persist Security Info=True;User ID=sa;Password=; Connect Timeout=200; pooling='true'; Max Pool Size=200";
// Bulk Copy to SQL Server
SqlBulkCopy bulkInsert = new SqlBulkCopy(CS);
bulkInsert.DestinationTableName = "test";
bulkInsert.WriteToServer(dt);
我开发了将多个 excel 文件导入 SQL 的 SSIS 包。现在的问题是 "Excel data source" 检查前几行以确定数据类型,我的备注栏采用了长度为 255 的文本数据类型。
但在某些文件中备注超过 255 个字符。
我查看了一些博客,他们说有意将长文本放在第一行以进行注释,然后 SSIS 会将数据类型确定为 Unicode 文本流。这解决了我的问题,但是当其他文件再次导入时,数据类型再次更改为 255 个字符并出现截断错误。
请告知如何解决此问题。
更新 - 2022-02-04:
以下答案中列出了解决方案和变通方法:
- Cannot import long text from Excel to SQL Server using SSIS
初始答案:
在数据流任务中,右键单击 Excel Source 组件,进入 Advanced Editor >> 输入和输出属性 选项卡,并在外部列和输出列中手动更改列长度,如下面的屏幕截图所示。
我已经解决了在 SSIS 脚本任务中使用以下代码导入特定列中超过 255 个字符的问题 excel。
string path = Dts.Variables["User::FileName"].Value.ToString();
FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = null;
excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
DataSet result = excelReader.AsDataSet();
excelReader.Close();
var dt = result.Tables[0];
string CS = "Data Source=localhost;Initial Catalog=Demo;Persist Security Info=True;User ID=sa;Password=; Connect Timeout=200; pooling='true'; Max Pool Size=200";
// Bulk Copy to SQL Server
SqlBulkCopy bulkInsert = new SqlBulkCopy(CS);
bulkInsert.DestinationTableName = "test";
bulkInsert.WriteToServer(dt);