如何使用存储过程创建 Excel 文件

How to create an Excel file using a stored procedure

提问人:Imogen 提问时间:10/13/2023 最后编辑:marc_sImogen 更新时间:10/13/2023 访问量:75

问:

我有一个 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文件。这可以下载到客户的计算机上吗?

sql-server excel 存储过程

评论

1赞 Thom A 10/13/2023
不要在 T-SQL 中执行此操作。使用适当的工具来执行此操作。
0赞 siggemannen 10/13/2023
似乎excel文件应该是CSV文件?
0赞 Brad 10/13/2023
我会创建一个 .csv 文件,这要容易得多,默认情况下它会在 Excel 中打开。
0赞 jkpieterse 10/14/2023
为什么不使用 Excel 的“数据,获取数据”按钮从该存储的进程中提取数据?保存文件,然后只需打开文件并单击“刷新”即可
0赞 AlwaysLearning 10/14/2023
尽管上面的代码生成了带有扩展名的文件,但它们肯定不是 Excel 期望找到的旧版 BIFF 格式文件(是的,我知道,这就像“ATM 机”)。直接从 SQL Server 创建 Excel 文件的唯一受支持方法是通过 SQL Server 报告服务执行此操作,除非您使用的是非常旧版本的 SQL Server 和 SSRS,否则这些将是新式 .xlsx 文件。但是,奖励的是,您可以创建报告订阅,以便可以定期生成这些 Excel 文件并通过电子邮件发送给某人。.xls

答: 暂无答案