如何从connectionstring ssis设置变量

时间:2014-09-25 13:39:21

标签: sql sql-server ssis

我对ssis包有疑问。我想在运行ssis包时动态填充变量。变量应该是正在执行的当前步骤/任务的连接字符串。例如,如果我有一个包含两个步骤的ssis包,则第一步的连接是Server1DB1,第二步的连接是Server2DB2。当我在第一步繁忙执行时运行包时,变量应该是Server1DB1,一旦完成,第2步执行变量应该是Server2DB2。我已经尝试找到答案,但所有文章都谈到基于变量更改连接,而不是相反。任何帮助都感激不尽。提前感谢你。

1 个答案:

答案 0 :(得分:0)

在脚本任务中,从Dts.Connections获取适当连接的ConnectionManager,然后将其ConnectionString属性分配给ReadWrite变量。

如果您的ConnectionString是由表达式设置的,则您需要让连接管理器获取连接,以便使用表达式的当前值更新ConnectionString属性。

例如:

    public void Main()
    {
        // Where "MyOLEDBConn" is the connection's name
        var connectionManager = Dts.Connections["MyOLEDBConn"];

        // AcquireConnection/ReleaseConnection is unnecessary if ConnectionString isn't set by an expression
        var rawConnection = connectionManager.AcquireConnection(Dts.Transaction);

        // "User::ConnectionString" is configured as a ReadWrite variable for the Script Task
        Dts.Variables["User::ConnectionString"].Value = connectionManager.ConnectionString; 

        connectionManager.ReleaseConnection(rawConnection);

        Dts.TaskResult = (int)ScriptResults.Success;
    }

任务根据其表达式获取连接字符串的当前值,因此需要在表达式的值与记录任务时的值相同的位置执行获得了它的联系。任务可以直接放在您要记录的每个步骤之前或之后,或者(更好)在执行前或执行后的事件处理程序中。

替代

另一种方法是使用表达式任务来配置连接字符串并将其分配给变量。连接(通过表达式)和日志记录过程都可以使用此变量,从而无需从ConnectionManager获取连接字符串。这将消除对上述脚本任务的需要。

相关问题