如何通过存储过程将变量值传递给作业执行的SSIS包?

时间:2015-12-09 15:45:27

标签: sql-server stored-procedures ssis

嗯,非常具体。 我有一份执行SSIS包的工作。这个包有一个名为" Email"这是一个字符串。

我通过存储过程执行此作业。我需要将该变量的值传递给作业,我该怎么做?

这是我用来执行作业的存储过程(@VarValue是我想传递给SSIS包的值):

USE [DevDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[spChecklistEmail]
    @JobName [nvarchar](100),
    @VarValue [nvarchar](255),
    @ReturnValue [int] OUT
AS
BEGIN

    SET NOCOUNT ON;
    DECLARE @JobId binary(16);
    DECLARE @job_status INT

    SELECT @JobId = job_id FROM msdb.dbo.sysjobs WHERE (name = @JobName);
    SELECT @job_status = [dbo].[fn_GetJobStatus](@JobName);

    IF (@job_status IN (2, 4))
        BEGIN 
            SET @ReturnValue=@job_status;
        END
    ELSE
        BEGIN
            IF (@JobId IS NOT NULL)
                BEGIN
                    EXEC @ReturnValue=msdb.dbo.sp_start_job @job_id=@JobId;
                END
            ELSE
                BEGIN
                    SET @ReturnValue=-2;
                END
    END

    RETURN (@ReturnValue)
END

2 个答案:

答案 0 :(得分:0)

没有任何真正简单的方法可以做到这一点。我唯一能想到的就是获取该值,然后在调用包之前创建一个表或临时表并将变量加载到您创建的表中。之后,您可以访问您的ssis包中的varibale,了解您需要使用它的内容。不要忘记在工作结束后清理额外的桌子和/或价值。

答案 1 :(得分:0)

点击此链接:https://msdn.microsoft.com/en-us/library/jj820152.aspx

特别是第2部分。

看起来你可以创建变量并在EXEC语句中设置它们。

EXEC @ReturnValue=msdb.dbo.sp_start_job @job_id=@JobId, @parameter_name=N'Email', @parameter_value=@VarValue;

类似的东西。