Экспорт результата хранимой процедуры в Excel с именем столбца

#sql-server #excel #stored-procedures

#sql-сервер #excel #хранимые процедуры

Вопрос:

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

но у меня есть несколько проблем, они

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

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

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

 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. в первом случае я нашел решение.. просто вам нужно внести изменения в формат выходного файла .. это должен быть .csv вместо .xls

2. Обязательно ли использовать хранимую процедуру для экспорта данных или вы просто ищете способ запустить запрос и вывести результаты в файл csv / Excel (с заголовками)?

3. привет, billinkc, я решил обе проблемы .. спасибо

4. @navbingo не против поделиться тем, что вы в итоге сделали?

Ответ №1:

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

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