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