SSIS包适用于SSMS,但不适用于代理作业

时间:2017-01-31 15:12:41

标签: excel ssis sql-server-2012

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

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

但是,当它被复制到SQL代理作业并从那里执行时,既不加载也不移动文件。但它表明"成功"来自代理商日志。

同样的事情也发生在" SSIS工作"而不是T-SQL作业,即使使用Windows帐户的代理。(与ssms登录相同的帐户)

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

P.S。首先应用网络驱动器的相对路径,然后切换到绝对路径(\\ server \ folder)。它没有解决问题。

4 个答案:

答案 0 :(得分:1)

SSIS包作业在SQL Server代理的上下文中运行。设置什么帐户以在SQL Server上运行SQL Server代理?它可能需要作为可以访问网络共享的域帐户运行。

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

答案 1 :(得分:0)

我个人避免使用文件系统任务 - 我发现它不可靠。我会用脚本任务替换它,并使用 System.IO 命名空间中的.NET方法,例如的 File.Move 即可。这些方法更可靠,并且具有成熟的错误处理。

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

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

请务必使用其他版本链接选择相关的.NET版本。

答案 2 :(得分:0)

当我在过去看过这样的事情时,我的包裹是不是正在访问我认为是在运行时的路径,它正在寻找其他地方,找到一个空的文件夹&退出成功。

SSIS可能会有回归变量默认值的恶习。它可能正在寻找您在开发中使用的不同路径?也许硬编码所有路径值作为测试?或者放入断点和仔细检查所有变量的运行时间值&参数。

其他远射可能是:

  • 名称解析,您确定网络名称在运行时是否正确解析?

  • 32/64位问题。 Dev倾向于运行32位,live可能是64位。可能会干扰文件路径?也许在运行时强制为32位?

答案 3 :(得分:0)

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

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