SSIS Ole DB目标动态表名称

时间:2012-06-11 22:25:38

标签: variables ssis business-intelligence oledbconnection

我有一组平面文件(114个文件),每个文件都用数据库表名命名。 我有数据库模式,所以我的数据库准备就绪,没有记录。

我所要做的就是处理这些平面文件并将这些记录插入相应的表中。

我创建了一个SSIS包, 我正在尝试在Ole DB目标中设置动态表名。

我使用变量来设置动态表名。

我的包是enter image description here

在脚本任务中,我为变量

设置值
 public void Main()
        {
            // TODO: Add your code here

            string _path = string.Empty;
            if(Dts.Variables["FilePath"] != null)
                _path = Dts.Variables["FilePath"].Value.ToString();
            //MessageBox.Show(_path);
            //Variables vars = default(Variables);
            //Dts.VariableDispenser.LockForWrite("TableName");
            //vars["TableName"].Value = _path.Replace(@"C:\Users\GD\", "").Replace(".txt", "");
            Dts.Variables["TableName"].Value = _path.Replace(@"C:\Users\GD\","").Replace(".txt","");
            MessageBox.Show(_path + Environment.NewLine +"TableName: " + Dts.Variables["TableName"].Value.ToString());
            Dts.TaskResult = (int)ScriptResults.Success;
        }

messageBox为我提供了预期的数据。 但Ole DB Destination表无法识别第二个循环中的表名。

变量 enter image description here

Ole DB目的地设置 enter image description here

错误消息:

[OLE DB Destination [55]] Error: Column "ActiveCompositionGenericID" cannot be found at the datasource.

“ActiveCompositionGenericID”这是第一个目标表和第一个源文件中的列。

对于循环中的第二个文件,这不是源文件(正在发生)中的预期,并且这也不应该在目标表中。

此错误消息向我确认,Destination表仍指向First表名,并且未更改。

1 个答案:

答案 0 :(得分:1)

如果这些文件和目标表的结构相同,那么您尝试执行的操作将起作用。否则,第一个文件将加载但输入文件中的metadata changes一旦加载,该过程将失败。

上述模式在DTS中可以正常工作,但对SSIS无效。