【发布时间】:2019-09-16 21:26:16
【问题描述】:
我有一个设置为使用 ForEach 文件循环的 SSIS 包。此循环应获取所有 *.xlsx 文件并将它们传输到 SQL Server。
我遇到的问题是有几列可能没有文本到一千个字符。当我使用示例文件设置包并填写所有超过 255 个字符的列时,我可以成功地将这些列设置为 DT_NTEXT 并将数据传输到服务器。
但是,一旦我使用包含空格或 255 个字符以下的任何内容的 REAL 文件,它会在 SSMS 中引发错误,提示“无法检索列“x”的长数据。
我应该如何让包在导入时不查看数据类型,而只是根据包规范导入?我知道我在某处看到 SSMS 仍然查看前 8 行?所以我继续将“TypeGuessRows”更改为 0 它存在的任何地方。我没有重新启动服务器,但我确实重新启动了 SSMS 并且仍然有问题。我还将延迟验证和 ValidateExternalMetaData 设置为 false。
有人有解决这个问题的方法吗?
更新:这是应用 BLOBTempStoragePath 和 BufferTempStoragePath 后的错误截图。 SSIS Long Data Error
【问题讨论】:
-
您是否将数据流任务的
BLOBTempStoragePath属性设置为SSIS 服务可以访问的快速驱动器?参考:Set BLOBTempStoragePath and BufferTempStoragePath to Fast Drives -
@AlwaysLearning 是的;我确实应用了这两个,部署了,但仍然遇到同样的错误。我已更新我的问题以包含错误。
-
您有机会预先转换为文本文件吗? XLS 基本无法使用。
-
@Nick.McDermaid 那将是我的下一步。源代码是创建 .xls 文件的自动服务器报告 - 由于其他一些问题,我必须将其转换为 .xlsx 文件。我在想一个 .csv 文件可以工作,但是因为有评论字段我不能使用“,”所以也许 TAB 分隔?如果 Excel 文件可以正常工作,那就太好了,这样我就不必进行操作了。我不明白为什么 SSIS 认为它需要重新评估数据类型。
-
问题不是 SSIS,而是 Excel 驱动程序。 SSIS 只是做它被告知的事情。 Excel 是一种糟糕的数据交换格式。 CSV(逗号分隔的文本文件)也是如此。制表符分隔要好得多。
标签: sql-server ssis ssms