我得到一个我需要读入SQL表的CSV。现在它是通过Web应用程序手动上传的,但我想将其移到SQL服务器中。我没有直接将我的导入脚本移植到SSIS中的脚本中,而是想查看是否有更好的方法来实现它。
此特定CSV的问题在于前几列是已知的,并且具有适当的标头。但是,在该组之后,其余列都是稀疏填充的,甚至可能没有标题。
示例:
Col1,Col2,Col3,,,,,,
value1,value2,value3,,value4
value1,value2,value3,value4,value5
value1,value2,value3,,value4,value5
value1,value2,value3,,,value4
使这种情况可以忍受的是,Col3之后的所有内容都可以连接在一起。该脚本检查这些尾随列的每一行,并将它们放在一个“misc”列中。它必须采用一种盲目方法,因为无法提前知道这些列中有多少列。
有没有办法使用SSIS工具执行此操作,还是应该将现有导入脚本移植到SSIS脚本任务?
答案 0 :(得分:0)
SSIS之外的另一个选择是使用BulkInsert和格式文件。
格式文件允许您描述传入数据的格式。
例如......
9.0
4
1 SQLCHAR 0 100 "," 1 Header1 SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 100 "," 2 Header2 SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "," 3 Header3 SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 100 "\r\n" 4 Misc SQL_Latin1_General_CP1_CI_AS
批量插入>> http://msdn.microsoft.com/en-us/library/ms188365.aspx
格式文件>> http://msdn.microsoft.com/en-us/library/ms178129.aspx
答案 1 :(得分:0)
步骤0.我的测试文件附加一行
Col1,Col2,Col3,,,,,,
value1,value2,value3,,value4
value1,value2,value3,value4,value5
value1,value2,value3,,value4,value5
value1,value2,value3,,,value4
ends,with,comma,,,value4,
您还会看到第3列到第8列。这些是列 需要集中到一个Misc列中。
转到Flat File Manager Editor的“高级”部分。
将第3列重命名为其他。将字段大小设置为4000。
注意:如果时间长于此值,则需要使用文本数据类型。 这将带来一些挑战,所以要准备好开心; - )
删除第4列到第8列。 现在添加一个脚本组件。 输入列 - 仅选择其他字段。用法类型:ReadWrite 代码:
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string sMisc = Row.Misc;
string sManipulated = string.Empty;
string temp = string.Empty;
string[] values = sMisc.Split(',');
foreach (string value in values)
{
temp = value;
if (temp.Trim().Equals(string.Empty))
{
temp = "NA";
}
sManipulated = string.Format("{0},{1}", sManipulated, temp);
}
Row.Misc = sManipulated.Substring(1);
}
- 目的地。 与平常没什么不同。
希望我理解你的问题,解决方案适合你。