【问题标题】:SSIS file exist check works in SSDT not running from SSISDBSSIS 文件存在检查工作在 SSDT 中未从 SSISDB 运行
【发布时间】:2020-08-04 08:17:54
【问题描述】:

这让我很困惑,我已经做了很长时间了。

迁移到 SQL Server 2016,大量 ETL。很简单。

其中一个 ETL 包有一个简单的脚本任务来获取文件表,运行文件存在 foreach 循环。

它使用项目参数来创建 unc (\servername\share),然后将其绑定到脚本任务中的文件名。

在 SSISDB 中使用环境配置设置

在 SSDT 中执行工作正常,部署到目录但它看不到文件。我知道你会说权限,但我允许每个人组共享和驱动,以防万一。 SSISDB 执行意味着它应该在我的安全上下文和我的域管理员、本地管理员和共享的创建者所有者下运行。

甚至奇怪,我创建了一个简单的包来获取其中一个文件的内容并导入到转储表中,以防权限或路径不正确(即使它们在 SSDT 中工作可能是 SSISDB 中的环境配置)。这工作得很好,因此它不能是被引用的 SSISDB 的环境设置。

请注意,这不是从代理作业运行的,因此不会是由于代理服务器帐户问题。需要先从 ssisdb 运行它,然后创建一个代理作业

所以 -- 脚本任务看不到 unc 共享,它由两个变量构建,在 ssdt 中工作并且它在相同的凭据下运行...

脚本任务代码的作用是什么

Dts.Variables("BolFileExists").Value = File.Exists(Dts.Variables("StrLoadFileLocation").Value.ToString & Dts.Variables("StrCurrentFile").Value.ToString)

【问题讨论】:

  • 当我遇到这样的情况时,我会尝试将尽可能多的信息发送到运行日志中。在您的情况下,在上述代码之前,我会触发一个记录 StrLoadFileLocationStrCurrentFile 值的信息事件,我还将使用 System.IO.Path.Combine 来构造路径以防万一错了。并发出那条路径。 Dts.Events.FireInformation 然后你必须检查 BoL 的 VB 语法
  • 您的 Visual Studio 是否与部署它的服务器位于同一台服务器上(可能在 SQL Server 上)。我认为您在部署服务器上可能没有相同的 .NET 级别。
  • 如果您看过我的其他答案,您可能会注意到,我喜欢使用(并且可能过度使用)脚本任务。但是为了检查文件是否存在,我已经转向使用 foreach 文件并在表达式中使用完整的文件路径。

标签: sql-server visual-studio ssis integration sql-server-data-tools


【解决方案1】:

这是一个略有不同的答案,因为它显示了不同的方法并删除了脚本任务。我使用 foreach 使用 SSIS 提供的 GUI 工具检查文件是否存在:

【讨论】:

    【解决方案2】:

    好吧,我找到了答案,我应该打自己的脸。

    什么都试过了,这是一个文件变量和路径变量在脚本任务中被拉到一起,所以尝试串联,在脚本任务之前,将它泵入一个表中以确保它会写入表。

    实际上一切都很好,但仍然无法正常工作。

    问题....

    将其作为 2017 包构建到 2016 Sql 服务器上。

    我还没有发现缺少 dll 的内容,但它一定是其中之一,这意味着脚本任务无法找到文件,但奇怪的是它没有中断,只是说文件不存在!

    感谢大家的意见,我要去把头伸进门里砰的一声关上

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多