我们有一个通过 SQLAgent 作业运行的 SSIS 包。我们正在从 ASP.NET 网页中启动作业(通过 sp_startjob)。登录到 UI 的用户需要使用用户启动的 SSIS 包登录 - 因此我们需要将 userId 传递给 SSIS 包。问题是我们无法将参数传递给 sp_startjob。
有谁知道如何实现和/或知道上述方法的替代方法
我们有一个通过 SQLAgent 作业运行的 SSIS 包。我们正在从 ASP.NET 网页中启动作业(通过 sp_startjob)。登录到 UI 的用户需要使用用户启动的 SSIS 包登录 - 因此我们需要将 userId 传递给 SSIS 包。问题是我们无法将参数传递给 sp_startjob。
有谁知道如何实现和/或知道上述方法的替代方法
它不能通过 sp_startjob 完成。您不能将参数传递给作业步骤,因此该选项已失效。
如果您不关心并发性,并且考虑到您不能同时运行相同的作业,您可以通过将作业步骤从 SQL Server Integration Services 类型更改为类似 OS 命令的方式来破解它。让操作系统命令调用网页创建/修改的批处理脚本。最终结果是您像这样启动您的包dtexec.exe /file MyPackage /Set \Package.Variables[User::DomainUser].Properties[Value];\"Domain\MyUser\"
此时,您的包中的变量 DomainUser 将具有 Domain\MyUser 的值。
我不知道你的要求,所以也许你可以调用 .NET 框架并从网页启动你的包。尽管您可能希望确保异步调用。否则,除非您的 SSIS 包非常快,否则用户可能会尝试导航离开,垃圾邮件刷新等等待它到页面“工作”。
顺便说一句,所有这些只是将一个值推入 SSIS 包。在这种情况下,用户名。它不会传递他们的凭据,因此调用SYSTEM_USER
会报告 SQL 代理用户帐户(或作业步骤的操作员)之类的东西。