使用 SSIS 创建文件和文件夹到网络驱动器

Create files and folder to network drive using SSIS

我创建了 SSIS 包,它使用文件系统任务在输出位置创建新文件夹,然后使用数据流任务在该文件夹中创建数据文件。

我创建了一个映射到 azure blob 的网络驱动器。因此,我将 Z:\ 等网络驱动器路径传递给包,文件夹和文件按预期创建,这也反映在 azure blob 上。

现在,当我通过 SQL 代理作业安排此程序包时,出现错误,无法从文件系统任务中找到路径 Z:\folderName 的一部分。所以我认为这是因为 sql 服务器代理服务不是通过我的用户 ID 运行。所以我用我的凭据启动了 sql 服务器代理,但它仍然给我同样的错误。

注意:我的ID不能直接访问azure blob,网络驱动器只能通过我的id访问。

我们目前正在为开发人员使用 azure blob,但我们可能会使用单独的服务器来存储文件,因此我无法使用 SSIS azure 服务包中提供的灵活文件系统任务

我们有无法使用 UNC 路径 (\server\share\file.txt) 的原因,并且在映射驱动器方面也遇到了困难。我们最终使用的方法是将驱动器显式映射和取消映射作为我们的 ETL 过程的一部分。

执行进程任务 - 安装驱动器

我们使用了一个批处理文件来挂载驱动器,因为它使我们的事情变得更容易,但该命令将采用类似

的形式
net use Z: \server\share mypassword user@azure

执行进程任务 - 卸载驱动器

再次执行流程任务

net use /delete Z:

我们完成了一个前驱步骤,我不记得我们是如何完成它的,但我们会在尝试安装之前测试驱动器是否已卸载。我认为是文件系统任务来查看驱动器是否存在,如果存在,则我们复制了卸载任务。

我能够使用凭据管理器解决此问题。我使用域用户登录,然后将 \\server、userid 和 password 等天蓝色路径添加到 windows credentials 。然后使用相同的域用户标识启动 sql 服务器代理服务。将文件路径设置为 \\server\share 类似于我在 windows 凭据中提供的 ssis 包 configurations.After 这样做我能够通过 sql 成功执行包代理工作。

我能够使用脚本任务(C# 代码)移动数据来解决这个问题。我为 Target ShareFolder 生成了一个项目参数,并将其用作脚本任务的 ReadOnlyVariable。目标共享文件夹已在我的本地 PC 和应用程序服务器上映射为网络驱动器。