在将Excel文件导入SQL Server时忽略列

5
我有多个格式相同的Excel文件,需要将它们导入SQL Server。
目前遇到的问题是,有两列文本需要被完全忽略,因为一些行的字符长度超过了服务器可以导入的长度,这导致截断错误。
由于我的分析不需要这些列,所以我导入的表格不包含这些列,但出现了 SSIS 包仍会识别这些列并在导入作业进行到一半时中断的情况。
我尝试使用这些列的最大字符长度,但仍然导致截断错误。
我需要创建一个 SSIS 包,在不删除Excel中的这两列的情况下完全忽略它们。

你使用什么工具来创建SSIS包?在源和目标之间创建映射时,忽略某些列的方法似乎很明显。 - Denis Rubashkin
我正在使用SQL Server 2017导入和导出向导。 - Otshepeng Ditshego
因为我的表在映射时没有自动拥有那些列,所以这些列被忽略了,但是截断仍然会出现在那些被忽略的列上。 - Otshepeng Ditshego
在导入时,当您单击“映射列”时,它将显示详细的映射信息。对于要排除的列,在目标列中单击列名下拉菜单,将会出现一个“忽略”选项,选择此选项将能够忽略必须要排除的列以从过程中排除它们。 - mkRabbani
@OtshepengDitshego 请查看答案部分添加的图片。 - mkRabbani
4个回答

4
您可以在“编辑映射”对话框中指定要忽略的列。
我已经添加了图片供您参考: enter image description here

这对我不起作用 - 它仍然尝试导入该列。你有什么想法为什么会发生这种情况? - Kwahn

1
如果您只是在SSDT中创建SSIS包,则可以查询Excel文件以仅返回所需列。在包中,使用Excel文件创建Excel连接管理器。然后,在包的控制流中添加一个数据流任务,其中包含一个Excel源组件。在此源上,将数据访问模式更改为SQL命令,然后可以类似于SQL查询文件。在以下示例中, TabName 是包含将返回的数据的Excel选项卡的名称。如果选项卡或任何列名包含空格,则需要用方括号括起来,即 TabName 将是 [Tab Name] enter image description here

0

导入/导出向导

由于您在评论中提到正在使用SQL Server导入/导出向导。如果您要导入的列(范围)是固定的(例如:前10列),则可以解决此问题。

在导入/导出向导中,在选择目标选项后,您将被询问是否要从表或查询中读取:

enter image description here

选择查询选项,然后使用简单的 select 查询,在工作表名称后指定列范围。例如:
SELECT * FROM [Sheet1$A:C]

上述查询将从 Sheet1 中的前三列读取数据,因为 A:C 表示第一列 A 和第三列 C 之间的范围。

enter image description here

现在,您可以从编辑映射对话框中检查列:

enter image description here


SSIS

您可以在 SSIS 包中使用相同的逻辑,只需将访问模式更改为 SQL 命令后,在 Excel 源中编写相同的 SQL 命令即可。


-1

解决方案很简单。我需要编写一个查询来排除这些列。因此,您可以选择“编写查询”而不是选择“从一个或多个表复制数据”,并排除您不需要的列。这个方法百分之百有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接