Sql 如何从connectionstring SSI设置变量

Sql 如何从connectionstring SSI设置变量,sql,sql-server,ssis,Sql,Sql Server,Ssis,我对ssis包有疑问。我希望在运行ssis包时动态填充变量。变量应该是正在执行的当前步骤/任务的连接字符串。例如,如果我有一个包含两个步骤的ssis包,第一步的连接是Server1DB1,第二步的连接是Server2DB2。当我在第一步忙于执行的时候运行包时,变量应该是Server1DB1,一旦完成并且步骤2正在执行,变量应该是Server2DB2。我试图找到答案,但是所有的文章都提到了根据变量改变连接,而不是相反。任何帮助都将不胜感激。提前感谢。在脚本任务中,从Dts.Connections获

我对ssis包有疑问。我希望在运行ssis包时动态填充变量。变量应该是正在执行的当前步骤/任务的连接字符串。例如,如果我有一个包含两个步骤的ssis包,第一步的连接是Server1DB1,第二步的连接是Server2DB2。当我在第一步忙于执行的时候运行包时,变量应该是Server1DB1,一旦完成并且步骤2正在执行,变量应该是Server2DB2。我试图找到答案,但是所有的文章都提到了根据变量改变连接,而不是相反。任何帮助都将不胜感激。提前感谢。

在脚本任务中,从
Dts.Connections
获取相应连接的,然后将其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获取连接字符串的需要。这将消除上述脚本任务的需要。

动态部分在哪里发挥作用?任务A在服务器1DB1上做了一些事情,任务B在服务器2DB2上做了一些事情也许我用错了词…但是在运行时,当每个步骤都在执行时,变量会被更新/更改为当前正在执行的步骤/任务的连接。我仍然没有“获取它”。任务A在服务器1B1上执行X。该执行的结果是否以任何方式决定了任务B的执行位置?不,不是。该变量用于报告中的原因。当任务A忙于处理变量时,该变量应该是Server1DB1,然后我使用事件处理程序将该变量右转到表中。因此,当任务A执行时,我的目标是写入我用于报告该特定步骤使用的连接的表。现在,我们离您试图解决的问题越来越近了。您希望将特定任务使用的连接管理器记录到表中。您尝试这样做的机制是让事件处理程序做一些事情来填充变量,然后将其记录到表中?您好,谢谢您的回答。只有一个问题什么是MyOLEDBConn?我应该在那里使用哪个连接名?@LiamDomingo,将“MyOLEDBConn”替换为您的连接名。您可以在创建连接时选择该名称。该连接是一个普通SSIS连接,与创建任何其他SSIS连接一样。