Экспорт результата хранимой процедуры в Excel с именем столбца - PullRequest
3 голосов
/ 29 апреля 2011

Я прикрепил код для сохранения вывода хранимой процедуры в лист Excel.

но у меня мало вопросов, они

(1) все столбцы отображаются в первом столбце таблицы Excel. Мне это не нужно, мне нужно показывать отчет в различных столбцах.

(2) если я использую внутреннее соединение с основным, как я могу получить имена столбцов другой таблицы

Может кто-нибудь помочь мне решить вышеуказанные проблемы?

alter procedure proc_generate_excel_with_columns
(
  @db_name varchar(100),
  @schm_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)

  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='bcp " select * from (select ' + @columns + ') as t" queryout   
      c:\test.xls  -c -t,  -T -S ' + @@servername

  exec master..xp_cmdshell @sql

  --Generate data in the dummy file
  set @sql = 'bcp "select * from st..VEN_FULLREPORTMASTER 
                   where entry_date =  convert(varchar, getdate() - 3, 105) " 
              queryout  c:\data_file.xls  -c -t,  -T -S' + @@servername

  -- exec master..xp_cmdshell @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)

1 Ответ

0 голосов
/ 29 октября 2018

Если использование SSIS является опцией, это будет тривиальная задача для выполнения с помощью задачи потока данных.

Можете ли вы использовать SSIS или вам нужно чисто решение для tSQL?

...