2014-09-17 5 views
0

Как мы можем выполнить пакет SSIS из хранимой процедуры?Выполнение пакета SSIS из SSMS SQL Server

Я попытался установить пакет ssis. Есть ли способ запустить пакет ssis из хранимой процедуры без планирования, а не через работу?

+1

Какая версия SQL Server вы используете? Есть ли причина, по которой вы не хотите использовать эту работу? – GarethD

+0

С SQL Server 2012, развернутые пакеты могут быть вызваны из SP. –

ответ

0

Используйте нижеследующее. Я не знаю, какую версию вы используете, но вы должны понять это.

exec master.dbo.xp_cmdshell '""C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /F "location of your SSIS package" 
1

Если у вас есть SQL Server 2012, и вы используете модель развертывания проекта, очень легко запустить пакеты SSIS с помощью хранимой процедуры.

Вот один мой (упрощенный), чтобы показать вам, как это делается:

-- SET THESE VARIABLES YOURSELF (OPTIONAL IF YOU USE ENVIRONMENTS) 
    DECLARE @environment AS NVARCHAR(100); 


    -- DON'T SET THESE 
    DECLARE @execution_id AS BIGINT; 
    DECLARE @packageName AS NVARCHAR(128); 
    DECLARE @projectName AS NVARCHAR(128); 
    DECLARE @folderName  AS NVARCHAR(128); 
    DECLARE @refID   AS BIGINT 


    SELECT 
      @packageName = pck.name 
     , @projectName = p.name 
     , @folderName = f.name 
     , @refID  = r.reference_id 
    FROM [SSISDB].[catalog].[packages] pck 
     INNER JOIN [SSISDB].[catalog].[projects] p 
      ON pck.project_id = p.project_id 
     INNER JOIN [SSISDB].[catalog].[folders] f 
      ON p.folder_id = f.folder_id 
     INNER JOIN [SSISDB].[catalog].[environment_references] r  
      ON p.project_id = r. project_id 
    WHERE 
     pck.[name]    = 'ENTER THE NAME OF YOUR PACKAGE HERE' 
     -- BELOW IS OPTIONAL IF YOU USE ENVIRONMENTS 
     AND r.environment_name = @environment; 


    -- CREATE YOUR EXECUTION (DOESN'T START IT, THINK OF IT LIKE A PLACEHOLDER) 
     EXEC [SSISDB].[catalog].[create_execution] 
     @package_name  = @packageName, 
     @execution_id  = @execution_id OUTPUT, 
     @folder_name  = @folderName, 
     @project_name  = @projectName, 
     @use32bitruntime = False, 
     @reference_id  = @refID; 

    -- WHAT DO YOU WANT YOUR LOGGING LEVEL TO BE? 
     DECLARE @var0 SMALLINT = 1; --Basic 


    -- NEED TO SET ALL YOUR PARAMETERS HERE (INCLUDING LOGGING LEVEL) 
    EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=50 
     , @parameter_name = N'LOGGING_LEVEL', @parameter_value = @var0; -- BASIC 

    EXEC [SSISDB].[catalog].[set_execution_parameter_value] @execution_id, @object_type=30 
     , @parameter_name = N'YOUR CUSTOM PACKAGE PARAM', @parameter_value = 'YOUR CUSTOM VALUE'; 


    -- YOU GOOD TO GO? START IT 
    EXEC [SSISDB].[catalog].[start_execution] @execution_id = @execution_id; 
Смежные вопросы