Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel SSIS包可从SSMS工作,但不能从代理作业工作_Excel_Ssis_Sql Server 2012 - Fatal编程技术网

Excel SSIS包可从SSMS工作,但不能从代理作业工作

Excel SSIS包可从SSMS工作,但不能从代理作业工作,excel,ssis,sql-server-2012,Excel,Ssis,Sql Server 2012,我有一个SSIS包从网络驱动器加载excel文件。它的设计目的是加载内容,然后将文件移动到存档文件夹 当以下SQL语句在SSMS窗口中运行时,一切正常 但是,当它被复制到SQL代理作业并从那里执行时,该文件既不会加载也不会移动。但它从代理日志显示“成功” 同样的事情也发生在“SSIS作业”而不是T-SQL作业上,即使使用windows帐户的代理也是如此。(与ssms登录相同的帐户) 注意:首先应用网络驱动器的相对路径,然后切换到绝对路径(\\server\folder)。它不能解决问题。我个人避

我有一个SSIS包从网络驱动器加载excel文件。它的设计目的是加载内容,然后将文件移动到存档文件夹

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

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

同样的事情也发生在“SSIS作业”而不是T-SQL作业上,即使使用windows帐户的代理也是如此。(与ssms登录相同的帐户)


注意:首先应用网络驱动器的相对路径,然后切换到绝对路径(\\server\folder)。它不能解决问题。

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

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


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

当我在过去看到类似的情况时,我的包没有访问运行时我认为它所在的路径,它正在其他地方查找,找到一个空文件夹并成功退出

SSI可能有返回变量默认值的坏习惯。它可能正在查看您在dev中使用的不同路径?也许硬编码所有路径值作为测试?或者输入断点并仔细检查所有变量和参数的运行时值

其他远大目标可能是:

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

  • 32/64位问题。Dev倾向于运行32位,live可能是64位。可能会干扰文件路径?可能在运行时强制为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

我在ServiceBroker中遇到过类似的问题。

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


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

您是否已经尝试从Visual Studio中执行SSIS程序包?您是否对SSMS用户和代理用户进行了此操作?您是否收到任何警告/错误/调试消息?@Tyron78,它在Visual Studio中运行良好。是的,我尝试使用代理设置SSIS SQL代理作业,但它仍然不工作…@Tyron78奇怪的是,作业显示“成功”,没有错误消息。当你说作业成功运行时,你是指查看代理历史记录吗?您看过SSIDB中的执行报告了吗?有时,即使代理作业没有失败,错误也会显示在执行日志中。我一时记不清了,但我相信当代理以这种方式执行SSIS包时,只要tsql运行没有错误,即使包失败,代理也会报告成功。在SSIS的包级别中,您可以定义包“成功”所需的错误量-有时是1。意味着包的-1错误仍然返回成功执行。请检查-可能是您的包通过作业失败(可能是因为权限),但由于其配置,状态仍为成功。
 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