首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server读取bcp文件错误

问Server读取bcp文件错误
EN

Stack Overflow用户
提问于 2018-02-01 15:36:07
回答 1查看 431关注 0票数 1

我试图将表数据从一个Server传输到另一个Server,并希望为此使用bcp实用程序。这纯粹是为了在两个相同的模式之间传输数据,但是我不能使用类似SSDT的东西;我需要一些可以脚本化和可移植的东西,这样它就可以由只有SQL服务器和SSMS访问的其他人运行。

我正在生成一个本机输出文件和格式文件,如下所示:

代码语言:javascript
复制
$> bcp database.TableName OUT c:\data\bcp\TableName.bcp -T -N -S SQLINSTANCE

$> bcp database.TableName format nul -f c:\data\bcp\TableName.fmt -T -N

然后,在Management中,我试图依次阅读以下文件:

代码语言:javascript
复制
SELECT 
    *
FROM 
    OPENROWSET (BULK 'c:\data\bcp\TableName.bcp',
                FORMATFILE = 'c:\data\bcp\TableName.fmt') AS t1

但是我发现了这个错误:

大容量装载失败。列在第6行第19列的数据文件中太长。请验证字段终止符和行终止符的指定是否正确。

我以前成功地遵循了这个过程,并且它适用于其他表。但我对这张桌子有点意见。提到的列是数据类型nvarchar(max)。我可以检查源数据中的“问题”记录,它只是一个很长的字符串,但我没有看到任何其他特别之处。

在生成格式文件时,还有什么是我应该做的吗?或者我还缺少了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-01 15:57:25

如果您只是为了导入到另一个Server而导出,则应该使用本机格式。在这种情况下你不需要使用格式文件。只需进行本地导出和导入即可。

注意,您指定的是大写-N,而这不是本机的。本机的-n较低。

您应该使用以下内容进行导出:

代码语言:javascript
复制
bcp database.Schema.TableName OUT c:\data\bcp\TableName.bcp -T -n -S SQLINSTANCE

然后,在导入端,我最好使用批量导入,它根本不需要本机文件的格式:

代码语言:javascript
复制
BULK INSERT TargetDB.dbo.TargetTable
FROM 'c:\data\bcp\TableName.bcp'
WITH (DATAFILETYPE = 'native');

如果不能使用BULK INSERT,并且必须绝对使用OPENROWSET,则需要一个格式文件。bcp可以为您生成这一点,但同样,小写-n

代码语言:javascript
复制
bcp database.Schema.TableName format nul -f c:\data\bcp\TableName.fmt -T -n -S SQLINSTANCE

现在您的OPENROWSET应该可以工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48566478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档