Nếu bạn tìm hiểu về vấn đề, sẽ thấy nhiều bài viết hướng dẫn rằng ta có thể làm điều đó bằng cách gọi một Extended Stored Procedure gọi là xp_cmdshell.
Tuy nhiên từ phiên bản SQL Server 2012, Microsoft đã chính thức hỗ trợ thực thi trực tiếp một SSIS package từ stored procedure.
Sau đây là toàn bộ code để gọi SSIS Package từ Stored Procedure, có vẻ nó khá dài.
DECLARE @exec_id BIGINT EXEC [SSISDB].[catalog].[create_execution] --SSIS package name TABLE:(SELECT * FROM [SSISDB].internal.packages) @package_name=N'Test.dtsx', --Folder were the package lives TABLE:(SELECT * FROM [SSISDB].internal.folders) @folder_name=N'Warehouse ETLs', --Project name were SSIS package lives TABLE:(SELECT * FROM [SSISDB].internal.projects) @project_name=N'ImportPackages', @use32bitruntime=FALSE, --Environment reference, if null then no environment configuration is applied. @reference_id=NULL, --The paramter is outputed and contains the execution_id of your SSIS execution context. @execution_id=@exec_id OUTPUT SELECT @exec_id
SELECT [STATUS] FROM [SSISDB].[internal].[operations] WHERE operation_id = @exec_id
DECLARE @IntParam sql_variant = 2 --Some random parameter value, needs to be in sql_variant format EXEC [SSISDB].[catalog].[set_execution_parameter_value] -- The execution_id value we received by calling [create_execution] @exec_id, --30 is Package Parameters, you can also use 20 for Project parameters or 50 for Environment @object_type=30, --Parameter name @parameter_name=N'ParamDateOffset', @parameter_value=@IntParam
EXEC [SSISDB].[catalog].[start_execution] @exec_id
Để biết thêm chi tiết về thực thi package từ Stored Procedure ở SSIS 2012, tham khảo:http://thinknook.com/execute-ssis-via-stored-procedure-ssis-2012-2012-08-13/
Để biết thêm chi tiết về thực thi package từ Stored Procedure ở SSIS 2008, tham khảo:http://www.mssqltips.com/sqlservertip/2135/run-ssis-using-xpcmdshell-in-a-sql-server-stored-procedure/
0 comments:
Post a Comment