2

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

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

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

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

我的包裹是这样的在此处输入图像描述

在脚本任务中,我正在为变量设置值

 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 目标表无法识别来自第二个循环的表名。

变量 在此处输入图像描述

Ole DB 目标设置 在此处输入图像描述

错误信息:

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

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

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

此错误消息向我证实,目标表仍指向第一个表名,并且没有更改。

4

1 回答 1

1

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

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

于 2012-06-12T14:03:02.210 回答