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

使用bcp将表导出为前导0的excel文件

  •  0
  • DevT  · 技术社区  · 11 年前

    我需要使用 十亿立方米 命令

    id       |  phoneNo     | IsValid          
    --------------------------------------
    1        |  011         |    1
    2        |  011         |    1
    3        |  022         |    1
    4        |  022         |    1
    5        |  033         |    1
    6        |  011         |    1
    

    当我尝试导出电话号码时出现问题。excel中缺少前导零。

    到目前为止我所做的一切-

    alter procedure [dbo].[proc_generate_excel_with_columns]
    (       @SERVERNAME VARCHAR(100), 
            @db_name varchar(100),
            @table_name varchar(100),
            @file_name varchar(100)     
    )
    as
    
    --Generate column names as a recordset
    declare @columns varchar(8000), @sql varchar(8000), @data_file varchar(100),@schemaTable varchar(100)
    
    --set @table_name='test'
    set @schemaTable='dbo.'+ @table_name
    
    select
            @columns=coalesce(@columns+',','')+column_name+' as '+column_name
    from
            information_schema.columns
    where
            table_name=@table_name
    
    
    select @columns=''''''+replace(replace(@columns,' as ',''''' as '),',',',''''')
    
    --Create a dummy file to have actual data
    select @data_file=substring(@file_name,1,len(@file_name)-charindex('\',reverse(@file_name)))+'\data_file.xls'
    
    --Generate column names in the passed EXCEL file
    set @sql='exec master..xp_cmdshell ''bcp " select * from (select '+@columns+') as t" queryout "'+@file_name+'" -c -S'+@SERVERNAME+' -T '''
    
    exec(@sql)
    
    --Generate data in the dummy file
    
    set @sql='exec master..xp_cmdshell ''bcp "select * from '+'['+@db_name+']'+'.'+@schemaTable+'" queryout "'+@data_file+'" -c -S'+@SERVERNAME+' -T '''
    PRINT @sql
    exec(@sql)
    
    --Copy dummy file to passed EXCEL file
    set @sql= 'exec master..xp_cmdshell ''type '+@data_file+' >> '+@file_name+''''
    
    exec(@sql)
    
    --Delete dummy file
    set @sql= 'exec master..xp_cmdshell ''del '+@data_file+''''
    exec(@sql)
    

    我如何解决这个问题?我找到了 Solution here ,但它提到了使用这样的代码。

    SELECT '="' + phoneNo+ '"' from Phone
    

    但我似乎无法想出这个解决方案。我怎样才能克服这个问题。

    谢谢

    1 回复  |  直到 11 年前
        1
  •  0
  •   DevT    11 年前

    为此,我创建了中间表,在bcp命令中使用该表。

    create table temp_WriteDataToFile(PHONE text, IsValid varchar(1))
    
    insert into temp_WriteDataToFile 
     select '="'+ PHONE +'"',ACMA,convert(varchar(25)) from temp_ProcessData
    

    它需要以以下格式获取值:

    ="011 "
    

    然后它将允许在excel/csv命令中写入前导零