从 T-SQL 导出到 Excel 的问题,包括列名和未导出的列上的排序

Posted

技术标签:

【中文标题】从 T-SQL 导出到 Excel 的问题,包括列名和未导出的列上的排序【英文标题】:Issues Exporting from T-SQL to Excel including column names & sorting on a column that's not exported 【发布时间】:2020-12-10 07:14:52 【问题描述】:

我有一个包含 ERP 数据的 SQL 表,其中包含七家不同公司的超过 100 万条记录。此数据需要导出到 Excel 文件,打破公司的记录,并为每个公司按日期范围。根据公司和日期范围,它将生成超过 100 个单独的文件。 正在将结果导入第二个 ERP 系统,该系统要求导入文件为 Excel 格式,并且必须将列名作为第一行。记录需要按 [PostDate] 列排序,不得导出到最终记录集。

客户端的 SQL 服务器没有安装 MS Jet Engine 组件,以便我直接导出到 Excel。客户端不允许在此服务器上安装 MS Jet 引擎。

我已经有一个类似项目的代码导出到 CSV 文件,所以一直在尝试。我的 T-SQL 脚本循环遍历表,按公司和每次迭代的日期范围解析记录,并使用 BCP 导出到 CSV 文件。 BCP 命令通过使用带有 UNION SELECT [Col_1]、[Col_2]、...的初始 SELECT 'Col_1_Name'、'Col_2_Name' 等,将列名作为第一行。

只要我在 SELECT 中包含 ORDER BY 所需的 [PostDate] 列,此 UNION 就可以工作。这会以正确的顺序导出我需要的记录,带有列名,但还包括导入例程不接受的 [PostDate] 列。如果我从 SELECT 中删除 [PostDate],则带有 ORDER BY [PostDate] 的 UNION 将失败。 我们不希望顾问花时间从每个文件中删除 100 多个文件中不需要的列。

此外,正在导出的 VarChar 列之一([Department])包含具有前导零的行,例如“0999999”。 用户通过在 Windows 文件资源管理器中双击文件来打开 CSV 文件以查看数据,注意 [Department] 列值正常并显示前导零,然后另存为 Excel 并关闭文件以启动导入第二个ERP系统。此过程会导致从 [Department] 中删除前导零,从而导致导入失败。

我如何 (1) 直接导出到 Excel,(2) 在第 1 行中包含列名,(3) 按 [PostDate] 列对行进行排序,(4) 从导出的结果中排除 [PostDate] 列,以及(5) 保留 [Department] 列中的前导零?

【问题讨论】:

【参考方案1】:

您可以通过添加您需要的排序功能来扩展我对这个问题SSMS: Automatically save multiple result sets from same SQL script into separate tabs in Excel? 的回答。

或者,更好的方法是使用 SSIS。

【讨论】:

以上是关于从 T-SQL 导出到 Excel 的问题,包括列名和未导出的列上的排序的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS:报告导出到 excel,不包括特定列

从 Excel 导出中删除列

sql server通过T-SQL导出Excel到磁盘

sql server通过T-SQL导出Excel到磁盘

从 s-s-rS 导出到 Excel 中删除附加列

从 Excel 导出