Sql server 2008 SSIS脚本组件可以';不能写入可读写变量

Sql server 2008 SSIS脚本组件可以';不能写入可读写变量,sql-server-2008,ssis,Sql Server 2008,Ssis,我在SQLServer2008R2上的SSIS中有一个脚本组件,它需要能够写入读写变量以生成平面文件导出的文件名。我创建了一个包级变量来保存文件名,并将平面文件连接设置为使用包含该变量的表达式 我有一个脚本组件,它在post-execute方法中动态地构建文件名。我已经在脚本组件的ReadWriteVariables设置中设置了该变量 如果变量中没有默认值,包将立即失败,因为平面文件连接管理器尝试计算表达式以设置目标文件。所以,我只是输入了一个占位符文件名 问题是,现在它总是使用占位符文件名,而

我在SQLServer2008R2上的SSIS中有一个脚本组件,它需要能够写入读写变量以生成平面文件导出的文件名。我创建了一个包级变量来保存文件名,并将平面文件连接设置为使用包含该变量的表达式

我有一个脚本组件,它在post-execute方法中动态地构建文件名。我已经在脚本组件的ReadWriteVariables设置中设置了该变量

如果变量中没有默认值,包将立即失败,因为平面文件连接管理器尝试计算表达式以设置目标文件。所以,我只是输入了一个占位符文件名


问题是,现在它总是使用占位符文件名,而不是脚本指定的文件名。确保我可以写入这些变量的最佳方法是什么?我试过VariableName=“value”,我也试过使用variabledepender和这个.ReadWriteVariables[“VariableName”].value,它们都没有保留我在脚本中设置的值。

这里有一种方法,您可以从
脚本组件中为包变量赋值
可在
数据流任务中使用

我尝试锁定
脚本任务
脚本组件
中的变量,而不是在属性对话框中指定它们。我觉得这更容易维护

在下面的示例中,我有一个名为FileName的包变量,该变量在脚本组件中被赋值为
C:\Temp\PathChanged

我认为脚本组件可能不是操作包变量值(如文件名)的正确位置,但这同样取决于您尝试执行的操作

希望有帮助

/* Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

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 PreExecute()
    {
        base.PreExecute();
    }

    public override void PostExecute()
    {
        base.PostExecute();

        IDTSVariables100 varCollection = null;
        this.VariableDispenser.LockForWrite("User::FileName");
        this.VariableDispenser.GetVariables(out varCollection);

        varCollection["User::FileName"].Value = @"C:\Temp\PathChanged";
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
    }
}

这里有一种方法,您可以从
脚本组件中为包变量赋值
数据流任务中可用的

我尝试锁定
脚本任务
脚本组件
中的变量,而不是在属性对话框中指定它们。我觉得这更容易维护

在下面的示例中,我有一个名为FileName的包变量,该变量在脚本组件中被赋值为
C:\Temp\PathChanged

我认为脚本组件可能不是操作包变量值(如文件名)的正确位置,但这同样取决于您尝试执行的操作

希望有帮助

/* Microsoft SQL Server Integration Services Script Component
*  Write scripts using Microsoft Visual C# 2008.
*  ScriptMain is the entry point class of the script.*/

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 PreExecute()
    {
        base.PreExecute();
    }

    public override void PostExecute()
    {
        base.PostExecute();

        IDTSVariables100 varCollection = null;
        this.VariableDispenser.LockForWrite("User::FileName");
        this.VariableDispenser.GetVariables(out varCollection);

        varCollection["User::FileName"].Value = @"C:\Temp\PathChanged";
    }

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
    }
}

您的套餐中的活动顺序是什么?我假设这不是一个脚本组件,而是一个脚本任务(在控制流中),您可以在其中执行此名称解析。是吗?你的包裹里的事件顺序是什么?我假设这不是一个脚本组件,而是一个脚本任务(在控制流中),您可以在其中执行此名称解析。这是对的吗?关键是正确的答案是脚本组件似乎不能写入这些变量。一旦我在脚本任务中将脚本移动到控制流中,它就开始工作了。正确答案的关键在于脚本组件似乎无法写入这些变量。一旦我将脚本移动到脚本任务中的控制流中,它就开始工作了。