【发布时间】: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)
【问题讨论】:
-
当我遇到这样的情况时,我会尝试将尽可能多的信息发送到运行日志中。在您的情况下,在上述代码之前,我会触发一个记录
StrLoadFileLocation和StrCurrentFile值的信息事件,我还将使用 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