使用 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,
我有一个非常大的数据库需要发送给开发人员,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,