如何通过作业步骤高级选项卡更改SSIS包中的SqlStatementSource

时间:2015-06-28 13:01:56

标签: sql sql-server ssis

我部署了一个ssis包并创建了一个执行包的sql代理作业。我需要通过作业步骤高级选项卡更改其中一个sql任务中的SqlStatementSource。任何人都可以帮我怎么做?我在某处阅读它的可能但却无法回想起它究竟是如何完成的?

1 个答案:

答案 0 :(得分:0)

根据源提供程序,您有两种选择可以更改查询。

DFT Test使用OLE DB源,DFT T2是ADO.NET源。

enter image description here

我的数据流是脚本任务的源。

来源是一个简单的内联查询:SELECT 1 AS Foo;

脚本任务只是触发一个OnInformation事件,这样我就能看到数据行流过

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        bool fireAgain = false;
        ComponentMetaData.FireInformation(0, "Foo value", Row.Foo.ToString(), string.Empty, 0, ref fireAgain);
    }
}

OLE DB源

这要求您提前完成工作。您可以通过String类型的SSIS变量控制源语句。在这里,我选择将其命名为@[User::QuerySource],并将OLE DB源设置为使用变量作为查询源。

您可以在运行时/ SQL代理

配置
DTEXEC /file so_31100091.dtsx /set "\Package.Variables[User::QuerySource].Properties[Value]";"SELECT 2 AS Foo" /REP I

上面的命令会运行包并将SELECT 2 AS Foo的值赋给变量QuerySource,它位于包的根目录下。最后,我让引擎报告信息事件,以便记录。

ADO NET Source

这是少数几次之一,ADO NET Source可以提供帮助。它可以直接配置而无需修改包本身

DTEXEC /file so_31100091.dtsx /set "\Package\DFT T2.Properties[[ADO_SRC tempdb].[SqlCommand]]";"SELECT 3 AS Foo" /REP I

这里我使用命令SELECT 3 AS Foo然后设置任务," DFT T2"它有一个名为" ADO_SRC tempdb"的源,是SqlCommand的属性。

结束语

需要注意的重要事项是提供的查询必须匹配签名(列名和数据类型)。

在上面我手动执行了SSIS包。在SQL代理作业步骤编辑器中,您将使用"设置值"选项卡以访问键值对。