我正在尝试使用SSIS包将数据从.dat平面文件传输到SQL数据库表。我有一个如下所示的dat文件:
Booth 1 Weekly Status
Status Date Time Operator NESHAP HEPA Alarm
Initial Reading 10/3/2011 7:42 AM Ken Forsberg 0.00 0.00 No
System Reading 11/12/2011 3:10 AM System Log 0.24 2.01 No
No Login 11/12/2011 7:00 AM 0.24 2.03 Yes
No Login 11/12/2011 3:00 PM 0.24 2.03 Yes
No Login 11/13/2011 7:00 AM 0.24 2.04 Yes
No Login 11/13/2011 3:00 PM 0.24 2.02 Yes
No Login 11/14/2011 7:00 AM 0.24 2.06 Yes
No Login 11/14/2011 3:00 PM 0.24 2.05 Yes
No Login 11/15/2011 7:00 AM 0.24 2.06 Yes
No Login 11/15/2011 3:00 PM 0.24 2.04 Yes
No Login 11/16/2011 7:00 AM 0.24 2.05 Yes
No Login 11/16/2011 3:00 PM 0.24 2.05 Yes
No Login 11/17/2011 7:00 AM 0.24 2.07 Yes
No Login 11/17/2011 3:00 PM 0.25 2.10 Yes
No Login 11/18/2011 7:00 AM 0.25 2.09 Yes
但是当我运行平面文件连接管理器编辑器
时我对此有一般意见:
Locale English(United States)
Code page 1252 (ANSI - Latin I)
Format: Delimited
Text qualifier: none
Header row delimiter: {CR}{LF}
Header rows to skip: 0
Column names in the first data row: checked
对于我的专栏:
Row delimiter: {CR}{LF}
Column delimiter: Tab {t}
但是在预览窗口中它只显示一列
StatusDateTimeOperatorNESHAPHEPAAlarm
InitialReading10/3/20117:42 AMKen Forsberg0.000.00No
System Reading11/12/20113:10 AMSystem Log0.242.01No
NoLogin11/12/20117:00 AM0.242.03Yes
NoLogin11/12/20113:00 PM0.242.03Yes
...
我的行分隔符为Carriage Return
和Line Feed
,列分隔符为Tab
,但您可以看到该标签未被识别。
我确实在Notepad ++中打开了.dat文件以确认它们是由Tab分隔的,并且它们是。
我做错了什么?
答案 0 :(得分:6)
以下是问题:
该文件在第一行中具有不相关的行。当我说不相关时,我的意思是它与文件的其余部分不匹配。
标题行实际上位于文件的第二行,而不是第一行。
我将问题中的数据放入.dat文件中。在Notepad ++中打开时,请确保您的文件完全如下所示。箭头表示tabs
。要在 Notepad ++ 中查看特殊字符,请单击View --> Show Symbol --> Show All Characters
配置平面文件连接管理器时,请在字段Header rows to skip
中输入值 2 。另外,请不要选中复选框Column names in the first data row
,因为列名不在第一个行中,但它们位于第二个行中。
当您切换到Columns
部分时,列应正确显示您的文件实际与第一个屏幕截图中显示的内容匹配的数据。此外,SSIS将自动检测行和列分隔符。但是,行将被命名为Column 0,Column 1等,因为我们跳过了2行。
您可以点击Advanced
标签,然后根据您的偏好重命名列名称。
此外,数据应在Preview
部分正确显示。
希望有所帮助。
答案 1 :(得分:1)
您拥有哪个版本的SQL Server?
我的客户端有SQl Server 2008R2 SP2。我没有把它缩小到一个版本。
我发现即使Flat File Connection Manager显示设置了'Row Delimeter',XML代码也没有代码中的十六进制。
我的例子是使用Row Delimiter LF
注意ASCII
值是4个字符,在本例中为000A。其他字符也是必需的。前缀是_x,后缀是_
要修改XML代码,请打开SSIS项目并右键单击该包,然后选择“查看代码”。它应该在第41行。对于其他Row Delimiters,查找ASCII表。
您可以对此字符串执行搜索和替换。使用全部替换并查看“当前项目”
查找内容:“RowDelimiter”xml:space =“preserve”> x000A
答案 2 :(得分:0)
我认为您需要跳过至少一个标题行,因为Booth 1 Weekly Status
位于第一行,没有标题字段,并且您已指示SSIS从第一行获取标题字段。
答案 3 :(得分:0)
只是为了测试,打开excel中的.dat文件,看看你是否得到了想要的结果。
正如@competent_tech所提到的,你可能想要处理第一行: - )