Sql server 2008 SSIS脚本组件可以';不能写入可读写变量
我在SQLServer2008R2上的SSIS中有一个脚本组件,它需要能够写入读写变量以生成平面文件导出的文件名。我创建了一个包级变量来保存文件名,并将平面文件连接设置为使用包含该变量的表达式 我有一个脚本组件,它在post-execute方法中动态地构建文件名。我已经在脚本组件的ReadWriteVariables设置中设置了该变量 如果变量中没有默认值,包将立即失败,因为平面文件连接管理器尝试计算表达式以设置目标文件。所以,我只是输入了一个占位符文件名Sql server 2008 SSIS脚本组件可以';不能写入可读写变量,sql-server-2008,ssis,Sql Server 2008,Ssis,我在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)
{
}
}
您的套餐中的活动顺序是什么?我假设这不是一个脚本组件,而是一个脚本任务(在控制流中),您可以在其中执行此名称解析。是吗?你的包裹里的事件顺序是什么?我假设这不是一个脚本组件,而是一个脚本任务(在控制流中),您可以在其中执行此名称解析。这是对的吗?关键是正确的答案是脚本组件似乎不能写入这些变量。一旦我在脚本任务中将脚本移动到控制流中,它就开始工作了。正确答案的关键在于脚本组件似乎无法写入这些变量。一旦我将脚本移动到脚本任务中的控制流中,它就开始工作了。