【问题标题】:SSIS User Variable AssignmentSSIS 用户变量分配
【发布时间】:2013-10-03 07:05:58
【问题描述】:

有谁知道如何在 SSIS 的脚本中将一个用户变量分配给另一个用户变量?

我有两个用户变量,都是 DateTime 类型的。

我尝试在脚本任务中将一个分配给另一个,但出现无效类型错误

Dts.Variables["Query_AccountingDay"].Value = Dts.Variables["Override_AccountingDay"].Value;

给我错误: 错误:System.Reflection.TargetInvocationException:调用的目标已引发异常。 ---> Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException:分配给变量“User::Query_AccountingDay”的值类型与当前变量类型不同。变量在执行期间可能不会改变类型。变量类型是严格的,除了 Object 类型的变量。

我试过铸造,但不起作用。

请帮忙

【问题讨论】:

    标签: ssis


    【解决方案1】:

    所以你试过了吗?

    Dts.Variables["Query_AccountingDay"].Value = Convert.ToDateTime(Dts.Variables["Override_AccountingDay"].Value.ToString());
    

    如果这不起作用,介意快速截取变量窗口的屏幕截图,以便我们验证数据类型吗?

    我的看起来像这样,覆盖值是 2007-07-07,查询是 2011-10-19

    如此配置的脚本任务

    代码主体如下所示

        public void Main()
        {
            MessageBox.Show(String.Format("{0}:{1}", "Override_AccountingDay", Dts.Variables["Override_AccountingDay"].Value));
            MessageBox.Show(String.Format("Before {0}:{1}", "Query_AccountingDay", Dts.Variables["Query_AccountingDay"].Value));
    
            Dts.Variables["Query_AccountingDay"].Value = Convert.ToDateTime(Dts.Variables["Override_AccountingDay"].Value.ToString());
            Dts.TaskResult = (int)ScriptResults.Success;
    
            MessageBox.Show(String.Format("After {0}:{1}", "Query_AccountingDay", Dts.Variables["Query_AccountingDay"].Value));
        }
    

    通过消息框执行结果

    ---------------------------
    
    ---------------------------
    Override_AccountingDay:7/7/2007 7:37:36 AM
    ---------------------------
    OK   
    ---------------------------
    
    ---------------------------
    
    ---------------------------
    Before Query_AccountingDay:10/19/2011 7:37:41 AM
    ---------------------------
    OK   
    ---------------------------
    
    ---------------------------
    
    ---------------------------
    After Query_AccountingDay:7/7/2007 7:37:36 AM
    ---------------------------
    OK   
    ---------------------------
    

    【讨论】:

    • 是的,这个解决了它。我试图使用(DateTime)进行投射,我还在我的代码中发现了一个小错误,这也导致了一个问题。感谢这个写得很好的答案!
    【解决方案2】:

    Query_AccountingDay 变量必须指定为 ReadWrite 变量,而不是您指定的 ReadOnly 变量。

    希望对你有帮助

    内德

    【讨论】:

    • 为了在两年后让这个答案成为一个合理的答案,你真的应该说明为什么这是相关的并表明这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多