我已经创建了一个SSIS包,我在其中调用2个sp,每个包含一个参数 . 那么如何通过动态地将值作为参数传递给该包和存储过程来在存储过程中调用此包 .
最好创建一个Job,然后从你的程序中启动它 . 否则,您需要使用xp_cmdshell启动SSIS包,许多人认为这些包使用不当(安全风险) .
EXEC msdb.dbo.sp_start_job N'YourJobNameHere';
试着看Running SSIS package programmatically,它涵盖了以下所有方法:
使用SSIS对象模型以编程方式运行包
启动DTEXEC.EXE进程 . DTEXEC是用于执行SSIS包的命令行实用程序
使用SQL代理 . 您可以配置代理作业以运行程序包
使用其他一些实用程序为您启动DTEXEC
创建将运行包的自定义应用程序
EDIT 基于OP说他们无法将 Value 传递给工作
如果您不会有多个人一次尝试运行此程序包,则可以将值插入到特殊表中,以便存储过程(在程序包中)可以选择并使用 . 如果有多个人同时尝试运行该程序包,您可以创建一个队列表,其中作业从此队列表中提取所需的参数,然后运行该程序包,完成后拉出下一组,等等 .
可能是您可以在命令行模式下使用DTExec.exe实用程序运行该程序包 . 检查Jamie Thomson's blog .
例如: - / SET \ package \ DataFlowTask.Variables [User :: MyVariable] .Value; newValue
还检查这个MSDN page
2 回答
最好创建一个Job,然后从你的程序中启动它 . 否则,您需要使用xp_cmdshell启动SSIS包,许多人认为这些包使用不当(安全风险) .
EXEC msdb.dbo.sp_start_job N'YourJobNameHere';
试着看Running SSIS package programmatically,它涵盖了以下所有方法:
使用SSIS对象模型以编程方式运行包
启动DTEXEC.EXE进程 . DTEXEC是用于执行SSIS包的命令行实用程序
使用SQL代理 . 您可以配置代理作业以运行程序包
使用其他一些实用程序为您启动DTEXEC
创建将运行包的自定义应用程序
EDIT 基于OP说他们无法将 Value 传递给工作
如果您不会有多个人一次尝试运行此程序包,则可以将值插入到特殊表中,以便存储过程(在程序包中)可以选择并使用 . 如果有多个人同时尝试运行该程序包,您可以创建一个队列表,其中作业从此队列表中提取所需的参数,然后运行该程序包,完成后拉出下一组,等等 .
可能是您可以在命令行模式下使用DTExec.exe实用程序运行该程序包 . 检查Jamie Thomson's blog .
还检查这个MSDN page