代码之家  ›  专栏  ›  技术社区  ›  Don

使用sqlcmd将表查询保存到CSV,是否无法重新导入到同一个表定义中?

  •  0
  • Don  · 技术社区  · 9 年前

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

    这将以“第1行的大容量加载数据转换错误(截断)…”错误结束。我也尝试过导入/导出向导,但由于同样的问题(截断),它失败了。增加场长度的大小,解决了问题,但我真的很难理解为什么我需要这样做。来自同一个表的数据相同,应该将其大容量插入?!? 同样,问题发生在表中的每一列上,并且长度不同,因此没有一列的字符数与我必须添加的字符数相同。所有列都是varchar数据类型。sqlcmd是否在文件中插入了某种损坏?我试图寻找一个问题,我也尝试了rtrim(ltrim(columname))以确保没有空格,但我不确定它是如何工作的。如果这有帮助,我将使用sql server 2012。 谢谢

    1 回复  |  直到 9 年前
        1
  •  1
  •   Brian Stork    9 年前

    您应该研究BCP Queryout和BULKINSERT选项。如果要从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');
    

    (如果表没有标识,则可以消除 keepidentity,