我试图将表数据从一个Server传输到另一个Server,并希望为此使用bcp实用程序。这纯粹是为了在两个相同的模式之间传输数据,但是我不能使用类似SSDT的东西;我需要一些可以脚本化和可移植的东西,这样它就可以由只有SQL服务器和SSMS访问的其他人运行。
我正在生成一个本机输出文件和格式文件,如下所示:
$> 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中,我试图依次阅读以下文件:
SELECT
*
FROM
OPENROWSET (BULK 'c:\data\bcp\TableName.bcp',
FORMATFILE = 'c:\data\bcp\TableName.fmt') AS t1但是我发现了这个错误:
大容量装载失败。列在第6行第19列的数据文件中太长。请验证字段终止符和行终止符的指定是否正确。
我以前成功地遵循了这个过程,并且它适用于其他表。但我对这张桌子有点意见。提到的列是数据类型nvarchar(max)。我可以检查源数据中的“问题”记录,它只是一个很长的字符串,但我没有看到任何其他特别之处。
在生成格式文件时,还有什么是我应该做的吗?或者我还缺少了什么?
发布于 2018-02-01 15:57:25
如果您只是为了导入到另一个Server而导出,则应该使用本机格式。在这种情况下你不需要使用格式文件。只需进行本地导出和导入即可。
注意,您指定的是大写-N,而这不是本机的。本机的-n较低。
您应该使用以下内容进行导出:
bcp database.Schema.TableName OUT c:\data\bcp\TableName.bcp -T -n -S SQLINSTANCE然后,在导入端,我最好使用批量导入,它根本不需要本机文件的格式:
BULK INSERT TargetDB.dbo.TargetTable
FROM 'c:\data\bcp\TableName.bcp'
WITH (DATAFILETYPE = 'native');如果不能使用BULK INSERT,并且必须绝对使用OPENROWSET,则需要一个格式文件。bcp可以为您生成这一点,但同样,小写-n
bcp database.Schema.TableName format nul -f c:\data\bcp\TableName.fmt -T -n -S SQLINSTANCE现在您的OPENROWSET应该可以工作了。
https://stackoverflow.com/questions/48566478
复制相似问题