Ssis 为什么';SSI在导入数据库时是否识别制表符列分隔符?

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

我正在尝试使用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    
...
行分隔符为
回车符
换行符
,列分隔符为
制表符
,但正如您所见,制表符未被识别

我确实在Notepad++中打开了.dat文件,以确认它们是由Tab分隔的,并且它们是


我做错了什么?

我认为您需要跳过至少一个标题行,因为
Booth 1 Weekly Status
位于第一行,没有标题字段,并且您已指示SSIS从第一行获取标题字段。

为了进行测试,请在excel中打开.dat文件,查看是否获得所需的结果

正如@competable\u tech提到的,您可能需要处理第一行:-)

以下是问题:

  • 文件的第一行中有一个不相关的行。当我说不相关时,我的意思是它与文件的其余部分不匹配

  • 标题行实际上位于文件的第二行,而不是第一行

  • 我把问题中的数据放在一个.dat文件中。在记事本++中打开文件时,请确保文件的外观完全如下图所示。箭头表示
    选项卡
    。要在记事本++中查看特殊字符,请单击
    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。它无法识别这些标签。不知道发生了什么请帮助。我还必须将文本限定符设置为{“}。现在一切正常。谢谢你的帮助。