【问题标题】:Cannot import long text from Excel to SQL Server using SSIS无法使用 SSIS 将长文本从 Excel 导入 SQL Server
【发布时间】:2022-01-26 23:02:44
【问题描述】:

环境:

  • Microsoft® Excel® for Microsoft 365 MSO(版本 2112 Build 16.0.14729.20254)64 位
  • Microsoft SQL Server 2019 (RTM-CU14) (KB5007182) - 15.0.4188.2 (X64)
  • Microsoft Visual Studio 2019
  • Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows 设置为 0

在 Excel 中,我将单元格格式化为“文本”,并用一些超长的虚拟文本填充了第 2 行和第 3 行...(第 1 行是标题行)

当我进入 Excel 源代码/高级编辑器时,我可以将输出设置为 Unicode 文本流 [DT_NTEXT] 或其他任何内容,但外部列不能更改为 Unicode 以外的其他内容字符串 [DT_WSTR](255 个字符) 尽管注册表中的设置通常应该允许它并且尽管在前两行中有超长字符串(除了包含字段名称的第一行)

当然,当我尝试执行 SSIS 任务时,它会抛出一个正常的截断错误。

问题:我做错了什么或者应该在这里做什么才能真正能够导入数据?顺便说一句,这应该在某个时候实现自动化。

【问题讨论】:

  • 尝试从高级编辑器更改列长度。检查我的答案更新(第四部分)

标签: sql-server excel ssis etl sql-server-2019


【解决方案1】:

由于 Excel 工作簿不是数据库,OLE DB 提供程序会尝试从 Excel 工作表中检测最相关的元数据并将其作为表格数据读取,这在处理中型和大型 Excel 文件时大多不准确。在花费数年时间创建 SSIS 包之后,我会将 Excel 文件转换为 CSV 文件,然后使用平面文件连接管理器将其导入。或者我将使用 C# 脚本来导入数据。

我。将 Excel 转换为 CSV

您可以使用 C# 脚本自动执行将 Excel 转换为 CSV 的过程:

将 Excel 文件转换为 CSV 文件后,您可以使用平面文件连接管理器动态导入:

二。使用 C# 脚本

最好检查以下类,它是 SchemaMapper 项目的一部分:

此外,可以在以下链接中找到有关如何使用此库的分步指南:


三。编辑 Excel 连接字符串

如果您无法选择将 Excel 转换为平面文件,则可以强制 Excel 连接管理器忽略第一行中的标题,方法是添加 IMEX=1 以告诉 OLEDB 提供程序从第一行指定数据类型行 (这是标题 - 大多数时间都是字符串).

要编辑connectionstring 属性,请单击Excel 连接管理器 并按F4 键。在属性选项卡中,您可以编辑connectionstring 属性。

四。从高级编辑器更改列长度

尝试从高级编辑器更改 Excel 源列元数据:


使用 SSIS 导入 Excel 可能会让人头疼!您可以检查以下问题:

【讨论】:

  • 我同意 c# 比 SSIS 工具更好,并且会考虑使用 ExcelDataReader Nuget 并加载到 DataTable,然后使用 SqlBulkCopy 加载数据。有几个步骤可以做到这一点,但它非常有效。
  • @KeithL 所有需要的代码都在我的回答中提到的 SchemaMapper 项目中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多