提问人:Imogen 提问时间:10/13/2023 最后编辑:marc_sImogen 更新时间:10/13/2023 访问量:75
如何使用存储过程创建 Excel 文件
How to create an Excel file using a stored procedure
问:
我有一个 Blazor 应用程序和一个 SQL Server 数据库。在应用程序中,我想点击一个按钮,我希望生成一个 excel 文件并将其下载到客户端计算机,其中包含表格中的所有数据,让我们调用“用户”。其他线程似乎使用我不是的程序(如 SSIS/导出向导)或假设我非常了解这是我第一次这样做。我发现的最好的线程是这样的:https://www.sqlteam.com/forums/topic.asp?TOPIC_ID=49926
create procedure spUsers_generate_excel_with_columns
(
@db_name varchar(100),
@table_name varchar(100),
@file_name varchar(100)
)
as
--Generate column names as a recordset
declare @columns varchar(20), @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='exec master..xp_cmdshell ''bcp " select * from (select '+@columns+') as t" queryout "'+@file_name+'" -c'''
exec(@sql)
--Generate data in the dummy file
set @sql='exec master..xp_cmdshell ''bcp "select * from '+@db_name+'..'+@table_name+'" queryout "'+@data_file+'" -c'''
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)
但是什么都没有解释,所以我不知道我需要替换什么。
就像什么意思一样。@columns=coalesce(@columns+',','')+column_name+' as '+column_name
我以前使用过 SQL,我知道内部连接和变量,但这似乎很陌生。我只想在这个过程中执行所有内容。
任何帮助将不胜感激。
更新:似乎最好的建议是创建一个CSV文件。这可以下载到客户的计算机上吗?
答: 暂无答案
评论
.xls