【问题标题】:SSIS package deployed to SQL Server 2012SSIS 包部署到 SQL Server 2012
【发布时间】:2018-01-23 21:16:25
【问题描述】:

我有一个 SSIS 包,它可以打开 Excel 工作簿,进行大量编辑,然后关闭并保存。它使用 VB.NET 脚本使用 Interop 来实现大部分功能,并且可以在 VS 中正常运行。我已将此包部署到 SQL Server,当我执行包时,它从 SQL Server 失败。 SSIS 和 SQL Server 在同一台服务器上。

当我将脚本缩减为仅进行一些编辑然后关闭并保存时,它在 SQL Server 上运行良好。所以我认为这与许可无关。这几乎就像某些 Excel 脚本命令只在 SSIS 中工作而不在 SQL Server 中工作?我是这方面的新手,如果有任何故障排除提示,我将不胜感激。

【问题讨论】:

  • 错误信息是什么?
  • @mastashufu 没有错误信息,只是说脚本失败,然后我进入任务管理器并手动终止 Excel 进程。
  • 运行 sql 代理作业的帐户是什么? sql认证还是windows认证?服务帐号还是用户?
  • @Hadi 甚至不使用 SQL 代理,只是从 SQL 中的 IS 目录手动执行包。部分脚本使用相同的数据并将其保存到同一个地方 - 所以我认为它不是权限。
  • 某些 Excel.Interop 命令是否只能在 VS 中工作,而不能在 SQL 中工作???

标签: sql-server vb.net ssis excel-interop ssis-2012


【解决方案1】:

Interop 库需要一个普通用户帐户(windows 帐户) 才能打开工作簿。如果它被服务帐户使用(使用 xp_cmdshell 运行 dtexec 的示例),它将失败。它只会打开一个 EXCEL 进程(Open 方法将返回 null)。确保您正在使用 Windows 身份验证运行包。

您也可以使用EXECUTE AS命令使用windows帐户执行命令

【讨论】:

  • 好的 - 很有趣。但是,如果它正在打开工作簿,编辑一些单元格并保存它,这并不意味着正在使用互操作库(在较短的工作脚本中)?我相信如果我手动执行包,它会将我的 Windows 身份验证传递给包。我需要使用 jobstopwait 功能,但它不适用于 EXECUTE AS。
  • 相同的结果,从查询运行(所以应该通过我的 Windows 身份验证)。短脚本工作正常,长脚本永远不会完成,Excel 进程就在那里。
  • 您可能一直都是正确的......而不是直接运行查询(假设通过身份验证)我尝试使用相同的登录信息使用 EXEC AS 运行它,我收到了这条消息:消息 916,级别 14,状态 1,第 14 行 服务器主体“DOMAIN\USERID”无法在当前安全上下文下访问数据库“SSISDB”。奇怪的是帐户是数据库管理员。
  • 我现在有了它,所以当我从 SQL 手动执行包时,完整的脚本会运行,只有在从作业发送时才会失败。所以我现在要努力了!正如你所说的可能的权限。您的帮助非常好!
  • @Hadi 哦不 - 不要忽视任何人,感谢您的帮助!只是不确定是否已发布正确答案。所以现在我已经能够创建一个运行 SSIS 包的 proc。我可以直接执行该过程,它在大约 2 分钟内运行良好。如果我创建一个 SQL 代理作业只是为了运行该 proc - 它会在 5 秒后返回并显示成功 - 但无法完成 SSIS 包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2023-04-06
相关资源
最近更新 更多