我有多个具有相同格式的Excel文件。我需要将它们导入SQL Server。
我目前遇到的问题是,我需要完全忽略两个文本列,因为它们是自由文本,并且某些行的字符长度超过服务器允许我导入的长度,这会导致截断错误。
因为我不需要这些列来进行分析,所以要导入的表中不包含这些列,但由于某些原因,SSIS程序包仍会选择这些列并在中途完成导入工作。
我尝试对那些列使用最大字符长度,这仍然会导致截断错误。
我需要创建一个SSIS包,该包将完全忽略两列,而无需从Excel中删除这些列。
答案 0 :(得分:1)
答案 1 :(得分:1)
如果仅在SSDT中创建SSIS包,则可以查询Excel文件以仅返回所需的列。在程序包中,使用Excel文件创建一个Excel Connection Manager。然后,在包的“控制流”上添加其中包含Excel Source组件的“数据流任务”。在此源上,将数据访问模式更改为SQL命令,然后可以类似于SQL查询该文件。在下面的示例中,TabName
是包含将返回的数据的Excel选项卡的名称。如果选项卡或任何列名称包含空格,则它们将需要用方括号括起来,即TabName
将为[Tab Name]
。
答案 2 :(得分:1)
由于您在注释中提到您正在使用SQL Server导入/导出向导。如果您要导入的列(范围)固定(例如:前10列),则可以解决。
在导入/导出向导中,选择目标选项后,将询问您是否要从表中读取或查询:
选择查询选项,然后使用简单的选择查询并在工作表名称后指定列范围。例如:
SELECT * FROM [Sheet1$A:C]
由于A:C代表第一列Sheet1
和第三列A
之间的范围,因此上面的查询将从C
的前三列中读取。
现在,您可以在“编辑映射” 对话框中检查列:
您可以在SSIS包中使用相同的逻辑,将访问模式更改为SQL命令后,只需在Excel Source中编写相同的SQL命令即可。
答案 3 :(得分:0)
解决方案很简单。我需要编写一个查询,将排除列。因此,不是选择“从一个或多个表复制数据”,而是选择“编写查询”并排除不需要的列。这个工作100%