BCP数据文件中遇到意外的EOF

时间:2018-09-12 12:27:34

标签: ssms bcp

我试图使用bcp将数据从一个表复制到另一个数据库中的另一个表。

首先使用以下格式创建格式文件

!! bcp dbName1.dbo.tableName1 format nul  -S serverName1 -T -f D:\tableName1_fmt.txt -n

然后使用创建数据文件

!! bcp dbName1.dbo.tableName1 out D:\tableName1.txt  -S  serverName1 -T -c

现在,我尝试使用格式文件将数据文件导入另一台服务器中另一个数据库中的另一个表中

!! bcp dbName2.dbo.tableName2 in D:\tableName1.txt -f D:\tableName1_fmt.txt  -S ServerName2 -T -E 

然后产生了以下错误

Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Unexpected EOF encountered in BCP data-file

0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1    

我发现了问题所在。但这与Stackoverflow中的现有情况不同。

因此,我正在编写我的解决方案,以防有人遇到相同的情况可能会受益。

2 个答案:

答案 0 :(得分:0)

问题出在创建格式文件和数据文件时,使用了格式说明符foobar_cond)。

格式文件(-c)和数据文件(-n)的格式说明符不同。

当我将两者的格式说明符都更改为-n-c时,导入语句就起作用了。

由于保留列的数据类型对我来说很重要,因此-c用于格式化文件和数据文件

答案 1 :(得分:0)

这个谜题的答案是阴险的。 我度过了回不去的时光...

如果您使用的是 Windows,请使用 NotePad++ 并在菜单上的“编码”下,将其更改为 [UCS-2 LE BOM] 并尝试一下。 LE = 小端...

如此可恶的错误!我刚刚安装了 SQL Server 2019 和最新的 SQLCMD/BCP 工具。似乎这个错误已经存在一段时间了。

这个人救了我一命:https://shades-of-orange.com/post/Unexpected-EOF-encountered-in-BCP-data-file

这是我最后用的线

import { ComponentFixture, TestBed } from '@angular/core/testing';

import { LoadResourcesComponent } from './load-resources.component';

describe('LoadResourcesComponent', () => {
    let component: LoadResourcesComponent;
    let fixture: ComponentFixture<LoadResourcesComponent>;

    beforeEach(async () => {
        await TestBed.configureTestingModule({
            declarations: [LoadResourcesComponent],
        }).compileComponents();
    });

    beforeEach(() => {
        fixture = TestBed.createComponent(LoadResourcesComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    fdescribe('factorOrQuickpay', () => {
        beforeEach(() => {
            spyOn(component, 'factorOrQuickpay');
        });

        it('shows Factor Load scenario', () => {
            component.factorOrQuickpay()
            expect(component.factor).toBe(true);
        });
    });
});