SSIS包从SSMS开始工作,而不是从代理工作开始

我有一个SSIS包来加载networking驱动器的excel文件。 它旨在加载内容,然后将文件移动到存档文件夹。

以下SQL语句在SSMS窗口中运行时,一切正常。

但是,当它复制到SQL代理作业并从那里执行时,文件既不加载也不移动。 但是它从代理日志中显示“成功”。

同样的事情也发生在“SSIS工作”,而不是T-SQL工作,即使代理的Windows帐户。(与ssmslogin相同的帐户)

Declare @execution_id bigint EXEC [SSISDB].[catalog].[create_execution] @package_name=N'SG_Excel.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'ETL', @project_name=N'Report', @use32bitruntime=True, @reference_id=Null Select @execution_id DECLARE @var0 smallint = 1 EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 EXEC [SSISDB].[catalog].[start_execution] @execution_id GO 

PS首先应用networking驱动器的相对path,然后切换到绝对path(\\ server \ folder)。 这不是解决问题。

SSIS包作业在SQL Server代理的上下文中运行。 在SQL Server上设置了哪个帐户来运行SQL Server代理? 它可能需要以有权访问networking共享的域帐户运行。

或者您可以将Excel文件复制到SQL Server上的本地文件夹,以便软件包可以访问该文件。

我个人避免了文件系统任务 – 我发现它不可靠。 我会用脚本任务replace它,并使用System.IO命名空间中的.NET方法,例如File.Move 。 这些方法更可靠,并具有成熟的error handling。

这是System.IO命名空间的起点:

https://msdn.microsoft.com/en-us/library/ms404278.aspx

请确保使用“ 其他版本”链接select相关的.NET版本。

当我过去看到过这样的事情时,我的软件包没有访问我以为是在运行时的path,它正在寻找其他地方,find一个空的文件夹并退出成功。

SSIS可以有一个讨厌的习惯,回到可变的默认值。 它可能正在看你在开发中使用的不同path? 也许硬编码的所有path值作为testing? 或放入中断点并仔细检查所有variables和参数的运行时间值。

其他远投可能是:

  • 名称parsing,你确定networking名称在运行时是否正确parsing?

  • 32/64位的问题。 开发者倾向于运行32位,活着可能是64位。 可能会干扰文件path? 运行时可能强制为32位?

没有声明结束符( ; )的sql语句存在问题。

  Declare @execution_id bigint ; EXEC [SSISDB].[catalog].[create_execution] @package_name=N'SG_Excel.dtsx', @execution_id=@execution_id OUTPUT, @folder_name=N'ETL', @project_name=N'Report', @use32bitruntime=True, @reference_id=Null ; Select @execution_id ; DECLARE @var0 smallint = 1 ; EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50, @parameter_name=N'LOGGING_LEVEL', @parameter_value=@var0 ; EXEC [SSISDB].[catalog].[start_execution] @execution_id ; GO 

我在服务经纪人面临类似的问题..