c# - SSIS 脚本组件目标 - 将表数据拆分到多个文件
问题描述
我正在使用数据流任务连接到 oledb 源并运行产生数百万行的 sql 代码。每行都是一个 xml 内容,只有一列 (nvarchar(max))。我将它连接到脚本组件目标,原因是当行数达到 10k 时,我想停止并写入另一个文件。
当我使用断点时它工作正常,所以如果有 100 行并且我希望每个文件中有 10 行,当我使用断点时它会生成 10 个文件。但是,当我在没有断点的情况下运行 pacakge 时,它会创建随机数量的文件。例如:它创建 6 个文件,其中 3 个包含 10 行,其余 70 个被拆分到其他文件中。
我通读了文档和博客,看看输入缓冲区是否是同步的,看起来是这样。即每行一次处理一个,至少这是我的理解,所以我不确定这个问题的根本原因是什么?有人可以阐明一下。下面是我用来在 Script Componenet 中拆分文件的代码
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
StreamWriter writer;
int rowCount = 0;
int rowLimit = 50;
String RunFileName = "C:\\Users\\Desktop\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
public override void PreExecute()
{
base.PreExecute();
writer = new System.IO.StreamWriter(RunFileName, true);
rowCount = 0;
}
public override void PostExecute()
{
base.PostExecute();
writer.Dispose();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (rowCount == rowLimit)
{
writer.Dispose();
rowCount = 0;
RunFileName = "C:\\Users\\Desktop\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
writer = new System.IO.StreamWriter(RunFileName, true);
}
var data = System.Text.Encoding.Unicode.GetString(Row.XMLInnerText.GetBlobData(0, Convert.ToInt32(Row.XMLInnerText.Length)));
writer.WriteLine(data);
rowCount++;
}
}
解决方案
对不起,如果我浪费了任何人的时间。问题是因为我创建文件名的方式,它开始附加到同一个文件。
RunFileName = "C:\\Users\\Desktop\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
推荐阅读
- laravel - Laravel 路由模型绑定:找不到模型 id 时返回 json 响应
- python - PySide2 如何将分离的图例放置到另一个小部件?
- python - 如何在 python 中使用 deepcopy 创建实例?
- java - 如何使用扫描仪跳过空格并在单行中输入
- python - Python - 从列表中创建所有可能性
- angular - 需要访问组件内的 HTML 元素的类
- java - 将双属性序列化为字符串
- ruby-on-rails - 如何使用 searchkick 进行复杂查询?
- php - PHP 函数有时不工作。未发现错误
- r - 当 SelectorGadget 不适用时抓取数据表的表头数据?(刮擦基础)