none
使用BCP命令的一些疑问 RRS feed

  • 问题

  • exec master..xp_cmdshell 'bcp "W2_data..geshiyi" out "c:/test.csv" -c -S"10.203.20.102" -U"W2sa" -P"W2sa" '

    其中 geshiyi是一个view,W2_data是数据库,通过这个命令导出的CSV资料有800+mb,我的机器直接死机了。

    想请问一下是否可以导出成xlsx格式的

    2012年11月21日 3:56

答案

  • 如果LZ的表里面有自增列的话,例如RecordNO 就可以用下面的分页sql ,每页100条,一页一页地导出

    [pratice]是我的数据库 DP_OilCanOption是我的表

    每页记录数LZ可以自己定

    USE [pratice]
    DECLARE @PageIndex INT
    DECLARE @PageSize INT
    SET @PageIndex = 1
    SET @PageSize = 100
    
    BEGIN
        DECLARE @Page INT
        DECLARE @PageTotal INT
        DECLARE @CONSQL VARCHAR(4000)
        SET @Page = ( @PageIndex - 1 )
        SET @PageTotal = @Page * @PageSize
        SELECT TOP ( @PageSize )
                *
        INTO    #PageIndex
        FROM    [pratice].[dbo].DP_OilCanOption
        WHERE   RecordNO NOT IN ( SELECT TOP ( @PageTotal )
                                            RecordNO
                                  FROM      DP_OilCanOption
                                  ORDER BY  RecordNO )
        SET @CONSQL = 'SELECT 
        *
    	FROM #PageIndex '
        EXEC(@CONSQL)
        DROP TABLE #PageIndex
        SELECT  COUNT(RecordNO) AS TotalRecords
        FROM    DP_OilCanOption
    END


    给我写信: QQ我:点击这里给我发消息

    2012年11月21日 12:07

全部回复

  • 不能

    如果是用记事本打开文件导致死机, 那很正常, 这个没有针对大文件的打开做优化

    如果是导出的时候就死机, 那估计你的磁盘 I/O 性能不够好, 或者是系统有问题

    2012年11月21日 4:15
  • 刚才找了一台好一些的机器可以打开,但是发现2个问题

    1、所有列都在csv的第一列了,没有像我的view一样,好多咧

    2、里面的中文全部显示为????

    2012年11月21日 4:33
  • SQL2008 R2 SQL2008 跟SQL2005的bcp命令都不支持把数据导出到excel2007文件,只支持导出到excel2003文件

    并且excel2003的最大行数是65536行,如果大于这个行数的表数据就导不出了

    像LZ您所说的机器直接死机,那么只能提升硬件或者一部分数据一部分数据地导出


    给我写信: QQ我:点击这里给我发消息



    2012年11月21日 4:36
  • 用BCP命令怎么先导出一部分数据。

    2012年11月21日 4:42
  • 比如选择前一百条记录,然后导出

    exec master..xp_cmdshell 'bcp "SELECT TOP 100 * FROM [AdventureWorks].[HumanResources].[vEmployee]" queryout "c:/test.xls" -c -S"10.203.20.102" -U"W2sa"-P"W2sa"'
    每一次导出多少条记录你可以自己调整的

    给我写信: QQ我:点击这里给我发消息


    2012年11月21日 4:57
  • 用BCP命令怎么先导出一部分数据。


    可以用 bcp "select xxx " queryout xxxx
    2012年11月21日 5:19
  • 至于中文, 你可以选择 -w 来取代 -c 参数

    2012年11月21日 5:19
  • And you can specify code page in bcp.
    2012年11月21日 5:34
  • exec master..xp_cmdshell 'bcp "W2_data..geshiyi" out "c:/test.csv" -w -S"10.203.20.102" -U"W2sa" -P"W2sa" '

    用-w替代以后,发现导出的文件会变大,打开确很顺利。

    唯一发现的问题就是为啥有些行的数据会错乱呢?

    2012年11月21日 6:07
  • Most likely code page related, you can change it.
    2012年11月21日 6:11

  • BCP命令的参数

    -w
    和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nchar做为存储类型。



    -c
    使用char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符


    发现导出的文件会变大,估计是原来使用char类型做为存储类型如果是-c参数的话,现在使用-w参数以nchar做为存储类型存储的字节数变多 了

    还有LZ你所说的错乱是数据显示乱码,还是排列顺序出错?

    给我写信: QQ我:点击这里给我发消息

    2012年11月21日 6:48
  • 我发现应该是有些栏位里有内容是包含换行符,故造成导出的数据碰到换行符就自动换行了,请问该怎么调整。
    2012年11月21日 6:53
  • 没有出现在这个数据该出现的列上,比如应该是第3列的,结果去了下一行的第一列。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

    2012年11月21日 7:00
  • 这些有问题的栏位,我进行了 REPLACE(X.svcdesc, CHAR(13) + CHAR(10), '') ,把回车符替换掉,目前看起来挺正常,感谢各位前辈指点了。
    2012年11月21日 7:22
  • 能帮到LZ就好


    给我写信: QQ我:点击这里给我发消息

    2012年11月21日 8:53
  • 如果LZ的表里面有自增列的话,例如RecordNO 就可以用下面的分页sql ,每页100条,一页一页地导出

    [pratice]是我的数据库 DP_OilCanOption是我的表

    每页记录数LZ可以自己定

    USE [pratice]
    DECLARE @PageIndex INT
    DECLARE @PageSize INT
    SET @PageIndex = 1
    SET @PageSize = 100
    
    BEGIN
        DECLARE @Page INT
        DECLARE @PageTotal INT
        DECLARE @CONSQL VARCHAR(4000)
        SET @Page = ( @PageIndex - 1 )
        SET @PageTotal = @Page * @PageSize
        SELECT TOP ( @PageSize )
                *
        INTO    #PageIndex
        FROM    [pratice].[dbo].DP_OilCanOption
        WHERE   RecordNO NOT IN ( SELECT TOP ( @PageTotal )
                                            RecordNO
                                  FROM      DP_OilCanOption
                                  ORDER BY  RecordNO )
        SET @CONSQL = 'SELECT 
        *
    	FROM #PageIndex '
        EXEC(@CONSQL)
        DROP TABLE #PageIndex
        SELECT  COUNT(RecordNO) AS TotalRecords
        FROM    DP_OilCanOption
    END


    给我写信: QQ我:点击这里给我发消息

    2012年11月21日 12:07
  • 又碰到个奇怪的问题,当行数超过30万条,csv文件容量是有的,比如2.2g,但是用office2007打开的时候就啥也没有,而且是一闪就打开了。

    不知道是何状况。

    2012年12月12日 5:59
  • Should post this one in office forum.
    2012年12月12日 14:35
  • 大哥,能用中文说吗,我英语不好。

    2012年12月13日 3:23