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