0

我目前正在使用一个看起来像这样的 .txt 文件。(第一个括号前面有一个空格)

| Column 0 |
| 01/01/2013 | 123.56 |
| 02/12/2013 | 25.34 |

数据进入 SQL Server 的一列。我试图将分隔符设置为“条”,但它仍然不会拆分列。我假设吧台前面有一个空间,所以它无法识别它。

我需要将此列分成 2 个单独的列,一个用于“日期”,另一个用于“总计”。使用 SSIS,最好的方法是什么?我需要 SSIS,因为一旦分离,我将对这些数据进行一些其他转换。

4

1 回答 1

2

简单的方法是使用派生列转换。您可以使用

SUBSTRING(«character_expression», «start», «length»)

如果您的列的长度是静态的。您的日期的一个例子是:

SUBSTRING(INPUTColumn,3(列开始的字符数),10(列的大小))

如果您的列的大小不同,那么我将使用脚本任务来拆分字符串并自己格式化信息。如果您需要,我可以提供一些示例代码。

编辑:我再次查看了您的样本,此时我假设您的 cloumn 大小是动态的。如果是这样,最好的方法是使用脚本任务。然后,如果添加“|”,则可以使用 .split() 将行拆分为数组 和 " " 以及要拆分的参数将从原始字符串中删除。然后,您可以格式化您的数据并将其输出到您的数据库。

第一步是在 ssis 中创建一个字符串参数。它的值应该是你的文件路径。然后将Source Script 任务添加到您的数据流中。在自定义属性下的编辑器中将该参数添加到readOnlyVariables

然后像这样打开文件:

    byte[] empty = new byte[] { };
    //Outside parameter for the ssisparameter file path
    //Check for the parameter existance
    IDTSVariable100 filePathVariable;
    try
    {
        filePathVariable = this.ReadOnlyVariables["ParameterName"];
    }
    catch (Exception )
    {

    }
    string filePath = filePathVariable.Value.ToString();

这会将您的文件拆分为一组行。

 private String[] fileLines;
 using (StreamReader reader = new StreamReader(filePath))
        {
            //Read file and split into lines
            string fileStream = reader.ReadToEnd();
            fileLines = fileStream.Split('\n');
        }

使用您要使用的所有分隔符创建一个这样的数组。

 private char[] delimiters = { ' ', ':', '\n', '\\', '=' };

然后使用这样的方式循环遍历你的行:

string[] Tokens = fileLines[index].Split(delimiters);

以上所有内容都应包含在脚本任务的 preExecute 部分中。这里的想法是将所有信息分成单独的列表,这些列表将代表列(因此是日期列表和值列表)。

在您的脚本任务编辑器中,您可以将列添加为输出。然后将其添加到脚本的输出部分:

 for (int i = 0; i < lineCount; i++)
    {
        outputBuffer.AddRow();
        outputBuffer.date = dateList[i];
        outputBuffer.value = valueList[i];
     }
于 2013-08-27T15:52:17.503 回答