美文网首页
BCP command to export table data

BCP command to export table data

作者: 42c64edf12e9 | 来源:发表于2019-08-15 11:52 被阅读0次

    Here is a perfect running BCP command / SQL query which exports table data into excel sheet with column headers.

    I spent almost 5 hrs to got it working, exporting data without column headers is a very easy job.
    but the main task was getting column headers also in the first row of excel sheet..
    so here is the script.. enjoy

    NOTE: don't forget to replace RED elements with your local environment elements,
    基本上是改数据库名,Excel路径文件和列名等,参照原文链接

    use database
    go
    if object_id('spExportData_n') is not null
    drop proc spExportData_n
    go
    create proc spExportData_n
    (
    @dbName varchar(100) = 'database name',
    @sql varchar(8000) = 'select col1,col2,col3....col4 from table',
    @fullFileName varchar(100) = 'output file path'
    )
    as
    if @sql = '' or @fullFileName = ''
    begin
    select 0 as ReturnValue -- failure
    return
    end
    -- if DB isn't passed in set it to master
    select @dbName = 'use ' + @dbName + ';'
    if object_id('##TempExportData') is not null
    drop table ##TempExportData
    if object_id('##TempExportData2') is not null
    drop table ##TempExportData2
    -- insert data into a global temp table
    declare @columnNames varchar(8000), @columnConvert varchar(8000), @tempSQL varchar(8000)
    
    select @tempSQL = left(@sql, charindex('from', @sql)-1) + ' into ##TempExportData ' +
    substring(@sql, charindex('from', @sql)-1, len(@sql))
    
    exec(@dbName + @tempSQL)
    if @@error > 0
    begin
    select 0 as ReturnValue -- failure
    return
    end
    -- build 2 lists
    -- 1. column names
    -- 2. columns converted to nvarchar
    SELECT @columnNames = COALESCE( @columnNames + ',', '') + column_name,
    @columnConvert = COALESCE( @columnConvert + ',', '') + 'convert(nvarchar(4000),'
    + column_name + case when data_type in ('datetime', 'smalldatetime') then ',121'
    when data_type in ('numeric', 'decimal') then ',128'
    when data_type in ('float', 'real', 'money', 'smallmoney') then ',2'
    when data_type in ('datetime', 'smalldatetime') then ',120'
    else ''
    end + ') as ' + column_name
    FROM tempdb.INFORMATION_SCHEMA.Columns
    WHERE table_name = '##TempExportData'
    
    -- execute select query to insert data and column names into new temp table
    SELECT @sql = 'select ' + @columnNames + ' into ##TempExportData2 from (select ' + @columnConvert + ', ''2'' as [temp##SortID] from ##TempExportData union all select ''' + replace(@columnNames, ',', ''', ''') + ''', ''1'') t order by [temp##SortID]'
    
    exec (@sql)
    
    -- build full BCP query
    DECLARE @bcpCommand VARCHAR(8000)
    SET @bcpCommand = 'bcp " SELECT * from ##TempExportData2" queryout'
    SET @bcpCommand = @bcpCommand + ' C:\Temp\test.csv -c -w -T -U sa -P sa","-CRAW'
    EXEC database..xp_cmdshell @bcpCommand
    if @@error > 0
    begin
    select 0 as ReturnValue -- failure
    return
    end
    drop table ##TempExportData
    drop table ##TempExportData2
    set @columnNames =' '
    set @columnConvert =' '
    set @tempSQL =' '
    select 1 as ReturnValue
    

    原文链接:
    http://dotnetkeeda.blogspot.com/2009/09/bcp-command-to-export-data-to-excel.html

    相关文章

      网友评论

          本文标题:BCP command to export table data

          本文链接:https://www.haomeiwen.com/subject/tfzajctx.html