我部署了一个ssis包并创建了一个执行包的sql代理作业。我需要通过作业步骤高级选项卡更改其中一个sql任务中的SqlStatementSource。任何人都可以帮我怎么做?我在某处阅读它的可能但却无法回想起它究竟是如何完成的?
答案 0 :(得分:0)
根据源提供程序,您有两种选择可以更改查询。
DFT Test使用OLE DB源,DFT T2是ADO.NET源。
我的数据流是脚本任务的源。
来源是一个简单的内联查询: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);
}
}
这要求您提前完成工作。您可以通过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可以提供帮助。它可以直接配置而无需修改包本身
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代理作业步骤编辑器中,您将使用"设置值"选项卡以访问键值对。