【问题标题】:SSIS Package Error - BULK INSERT "file does not exist"SSIS 包错误 - 大容量插入“文件不存在”
【发布时间】:2016-12-01 19:49:34
【问题描述】:

我有一个 SSIS 包。在其中,有两个 Execute Package Task 元素。这两个包是链接顺序运行的。

套餐一 - 从外部网站 (SalesForce.com) 下载 CSV 文件

E:\SalesForce\MSSQL_Import\PricebookEntry.csv

E:是一个映射的网络驱动器。

包二 - SQL 任务将 CSV 文件的内容批量插入到空表中。

BULK INSERT SalesForce.dbo.PriceBookEntry
FROM 'E:\SalesForce\MSSQL_Import\PricebookEntry.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '\t',  
ROWTERMINATOR = '\n', 
CODEPAGE = 'ACP',    
ERRORFILE = 'E:\SalesForce\Data_Loader\Logs\Error\Bulk_Insert\BI_PriceBookEntry.csv',
TABLOCK
)

触发第二个 SSIS 包时出现以下错误:

[执行 SQL 任务] 错误:执行查询“BULK INSERT SalesForce.dbo.PriceBookEntry FROM ...”失败并出现以下错误:“无法批量加载。文件“E:\SalesForce\MSSQL_Import\PricebookEntry.csv”不存在。”。 可能的失败原因:查询有问题,“ResultSet” 属性设置不正确,参数设置不正确,或 连接未正确建立。

我已经检查了文件的位置。路径和拼写都很好。该文件在脚本运行时存在。

我已尝试将文件保存在 C: 上,只是为了检查。 BULK INSERT 包仍然失败。

我已在管理工作室中将 BULK 查询作为命令运行,它运行良好。

如果我在另一个包中将这些包链接在一起,则 BULK INSERT 会失败。如果我按顺序单独运行 SSIS 包,它们可以正常工作。

我有其他 SSIS 包可以做同样的事情并且工作正常。

我一直在谷歌搜索可能的解决方案,但仍然一无所获。有人对可能是什么问题有任何想法吗?

【问题讨论】:

  • E: is a mapped network drive 通常根本原因是执行 SSIS 包的帐户没有与开发它的用户映射相同的驱动器。放在 C 驱动器上时它不起作用的事实让我相信它也可能是权限问题。你已经在其他地方指定了这个工作,所以在第一次剪辑时,我不确定你在哪里出错了

标签: sql-server csv ssis bulkinsert


【解决方案1】:

我发现了问题。

快速回答是,在 SSIS 中触发 BULK INSERT 命令之前,正在下载的 CSV 文件尚未完成。因此 SQL Server 无法访问该文件。

以前的作业只处理非常小的文件(大约 2000 行)。这项工作正在处理更多(约 1 百万行)。

解决方案将涉及推迟 BULK INSERT 直到文件完成下载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多