使用 sqlcmd 将 table 查询保存为 CSV,无法重新导入回相同的 table 定义?

using sqlcmd to save a table query to CSV, cannot re-import back into the same table definition?

我有一个非常大的数据库需要发送给开发人员,table 有超过 1.2 亿行。开发人员说他只需要大约 10,000 行,所以我打算使用 sqlcmd -S -d -Q "select top 10000 * from table" -s "," -o "C:\temp\filename.csv" 我决定不立即截断,而是编写 table、重命名和测试批量插入的脚本,我尝试使用 批量插入来自 'c:\temp\filename.csv' 的 tablename 和 ( 字段终止符 = ',', 行终止符 = '\n' )

这以 "Bulk load data conversion error (truncation) for row 1..." 错误结束。我也在 import/export 向导中尝试过,但由于同样的问题(截断)而失败。增加字段长度的大小可以解决问题,但我真的很难理解为什么我需要这样做。它来自相同 table 的相同数据,它应该批量插入吗?!? table 中的每一列都发生了问题,并且长度不同,因此没有一列具有我必须添加的相同数量的字符。所有列都是 varchar 数据类型。 sqlcmd 是否会在文件中插入某种损坏?我试图寻找问题,我还尝试了 rtrim(ltrim(columname)) 以确保没有空格,但我不确定它是如何工作的。如果有帮助,我正在使用 sql server 2012。 谢谢

您应该查看 BCP Queryout 和 BULK INSERT 选项。如果您要从 SQL 到 SQL.

,请使用 NATIVE 格式

(BCP为命令行):

bcp "select top(10000) * from table" queryout "OUTPUTFILENAME.DAT" -S serverInstanceName -d databaseName -T -n

批量插入命令是SQL(不是命令行):

bulk insert table from 'path\and\OUTPUTFILENAME.DAT' with (keepidentity,datafiletype = 'native');

(如果table没有身份,可以去掉keepidentity,