Ssis 为什么';SSI在导入数据库时是否识别制表符列分隔符?
我正在尝试使用SSIS包将数据从.dat平面文件传输到SQL数据库表。我有一个dat文件,如下所示:Ssis 为什么';SSI在导入数据库时是否识别制表符列分隔符?,ssis,Ssis,我正在尝试使用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
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
...
行分隔符为回车符
和换行符
,列分隔符为制表符
,但正如您所见,制表符未被识别
我确实在Notepad++中打开了.dat文件,以确认它们是由Tab分隔的,并且它们是
我做错了什么?我认为您需要跳过至少一个标题行,因为
Booth 1 Weekly Status
位于第一行,没有标题字段,并且您已指示SSIS从第一行获取标题字段。为了进行测试,请在excel中打开.dat文件,查看是否获得所需的结果
正如@competable\u tech提到的,您可能需要处理第一行:-)以下是问题:
选项卡
。要在记事本++中查看特殊字符,请单击view-->Show Symbol-->Show All characters
配置平面文件连接管理器时,在要跳过的标题行字段中输入值2。另外,不要选中第一数据行中的复选框列名
,因为列名不在第一行,但在第二行
当您切换到列
部分时,如果您的文件实际与第一个屏幕截图中显示的内容相匹配,则列应正确显示数据。此外,SSI将自动检测行和列分隔符。但是,这些行将被命名为列0、列1等,因为我们跳过了2行
您可以单击Advanced
选项卡,并根据您的偏好重命名列名
此外,数据应正确显示在预览
部分
希望对您有所帮助。您有哪个版本的SQL Server
我的客户端有SQl Server 2008R2 SP2。我还没有把它缩小到一个版本
我发现,即使平面文件连接管理器显示设置了“行Delimeter”,XML代码中也没有十六进制
我的示例是使用行分隔符LF
注意ASCII
值为4个字符,在本例中为000A。其他字符也是必需的。前缀为x,后缀为_
要修改XML代码,请打开SSIS项目,右键单击包并选择“查看代码”。应该在第41行。对于其他行分隔符,请查阅ASCII表
您可以在此字符串上执行搜索和替换。使用“全部替换”并在“当前项目”中查找
查找内容:“rowdimiter”xml:space=“preserve”>x000AIT不适用于我。在第6列中,它不识别{CR}{LF}。所以在第6列中,我有NoNo登录,在第7列中,我有日期,在第8列中,我有时间,在第9列中,我有值0.242.00Yes。它无法识别这些标签。不知道发生了什么请帮助。我还必须将文本限定符设置为{“}。现在一切正常。谢谢你的帮助。