#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?