从SQL数据库创建CSV报告[关闭]

问题描述 投票:-1回答:2

从SQL数据库创建CSV报告的最佳方法是什么?

可以使用visual studio C#完成吗?

目标:每周从SQL数据库生成一份CSV报告。

谢谢

c# sql export-to-csv
2个回答
1
投票

这项任务可以通过多种方式完成。决定考虑以下内容:

  • 已经使用了哪些工具和技术?
  • 您是否需要记录和警报等功能;所以你知道出了什么问题以及出错了什么/哪里出错了?
  • 您是否有多个计划任务/您希望它们全部集中管理还是可以在各种不同的位置定义它们
  • 谁需要支持这个/哪些工具使他们更容易?
  • 每种方法的安全风险和影响是什么?
  • 如果服务器出现故障会发生什么?你需要高可用性吗?

下面我列出了一些简单的方法以及相关内容的链接;但这只是为了让你走上正轨;因为这个问题没有一个金点答案;但是有很多选择,每个都有自己的优点和缺点。

SQL

您可以使用SQL代理来安排任务。

您可以使用xp_cmdshell执行BCP或SQLCMD调用以将SQL数据导出为CSV。可以在此处找到使用BCP的示例:https://stackoverflow.com/a/43991158/361842注意:启用xp_cmdshell是一种安全风险;因为它在SQL服务的服务帐户下运行任务;因此可以允许有权访问的人使用xp_cmdshell执行他们自己的脚本,然后可以冒充这个帐户/让这些用户访问未分配给他们帐户的权限。

这种方法的优点是它是100%SQL;所以不用担心额外的依赖。

PowerShell

在PowerShell中,从数据库导出到CSV是微不足道的;它可以用这一行代码完成:

Invoke-Sqlcmd -ServerInstance 'myServer\instance' -Database 'myDb' -Username 'user' -Password 'super$£cret' -Query 'select some, stuff from myTable' | Export-csv -NoTypeInformation -Path '\\server\share\path\file.csv'

要每周发生这种情况,您可以使用Windows任务计划程序;只需将上述内容保存到文件(例如c:\scheduledTasks\myTask.ps1)并创建一个新任务,其操作定义为:

  • 节目:Powershell.exe
  • 添加参数:-ExecutionPolicy Bypass -File "c:\scheduledTasks\myTask.ps1"
  • 开始于:c:\scheduledTasks\

这样做的好处是PS安装在大多数机器上,它可以快速,轻松地运行,并且具有很强的适应性。缺点是你需要考虑安全性;即,您不希望将凭证放在纯文本中,因此您需要使用Windows身份验证或加密信用证;并且您还需要确保托管脚本的目录被锁定,以避免任何人为了自己的目的修改脚本,或者只是向他们显示未加密的凭据。

C#

可以在此处找到从数据库获取数据并输出到CSV的C#程序示例:https://stackoverflow.com/a/24458994/361842

这是非常好的,因为编译的文件比脚本更不容易附加(尽管记住,如果与调度程序一起运行,exe总是可以交换为不同的exe)。为避免这种情况,您可能希望将其编写为作为服务运行。更多关于此:https://stackoverflow.com/a/503606/361842


0
投票

如果这些是您手动运行的报告,那么我建议您使用SQL GUI工具(我使用Navicat,但还有许多其他选项)。其中大部分将允许您定义查询,甚至一些相当高级的报告,然后您可以轻松地运行并导出为CSV。

如果要自动运行它们,则需要编写一些代码来执行任务。我建议Python比C#更容易做到这一点,但它在C#中肯定是可行的。要实现这一点,您需要为您的数据库找到合适的C#API(除非.NET内置了它 - 自从我在该领域工作以来已经有一段时间了),并使用它来查询数据库。然后,使用可用的标准文件编写类,创建CSV文件应该相当简单。

© www.soinside.com 2019 - 2024. All rights reserved.