从SQL数据库创建CSV报告的最佳方法是什么?
可以使用visual studio C#完成吗?
目标:每周从SQL数据库生成一份CSV报告。
谢谢
这项任务可以通过多种方式完成。决定考虑以下内容:
下面我列出了一些简单的方法以及相关内容的链接;但这只是为了让你走上正轨;因为这个问题没有一个金点答案;但是有很多选择,每个都有自己的优点和缺点。
您可以使用SQL代理来安排任务。
您可以使用xp_cmdshell
执行BCP或SQLCMD调用以将SQL数据导出为CSV。可以在此处找到使用BCP的示例:https://stackoverflow.com/a/43991158/361842注意:启用xp_cmdshell
是一种安全风险;因为它在SQL服务的服务帐户下运行任务;因此可以允许有权访问的人使用xp_cmdshell
执行他们自己的脚本,然后可以冒充这个帐户/让这些用户访问未分配给他们帐户的权限。
这种方法的优点是它是100%SQL;所以不用担心额外的依赖。
在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身份验证或加密信用证;并且您还需要确保托管脚本的目录被锁定,以避免任何人为了自己的目的修改脚本,或者只是向他们显示未加密的凭据。
可以在此处找到从数据库获取数据并输出到CSV的C#程序示例:https://stackoverflow.com/a/24458994/361842
这是非常好的,因为编译的文件比脚本更不容易附加(尽管记住,如果与调度程序一起运行,exe总是可以交换为不同的exe)。为避免这种情况,您可能希望将其编写为作为服务运行。更多关于此:https://stackoverflow.com/a/503606/361842
如果这些是您手动运行的报告,那么我建议您使用SQL GUI工具(我使用Navicat,但还有许多其他选项)。其中大部分将允许您定义查询,甚至一些相当高级的报告,然后您可以轻松地运行并导出为CSV。
如果要自动运行它们,则需要编写一些代码来执行任务。我建议Python比C#更容易做到这一点,但它在C#中肯定是可行的。要实现这一点,您需要为您的数据库找到合适的C#API(除非.NET内置了它 - 自从我在该领域工作以来已经有一段时间了),并使用它来查询数据库。然后,使用可用的标准文件编写类,创建CSV文件应该相当简单。