从SQL数据库创建CSV报告的最佳方法是什么?
可以使用Visual Studio C#完成吗?
目标:每周从SQL数据库生成CSV报告。
谢谢
答案 0 :(得分:1)
可以通过多种方式完成此任务。要决定考虑以下内容:
下面,我列出了一些简单的方法以及相关内容的链接。但这只是让您步入正轨;因为这个问题没有一个黄金答案;但是有很多选择,每种都有各自的优缺点。
您可以使用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 Task Scheduler;只需将以上内容保存到文件(例如c:\scheduledTasks\myTask.ps1
)中,然后创建一个新任务,并将其操作定义为:
Powershell.exe
-ExecutionPolicy Bypass -File "c:\scheduledTasks\myTask.ps1"
c:\scheduledTasks\
这样做的好处是,大多数机器上都安装了PS,它运行起来既快捷又容易,并且适应性强。 缺点是您需要考虑安全性;也就是说,您不想以纯文本形式放置凭据,因此您要么需要使用Windows身份验证,要么对凭据进行加密;并且还需要确保托管脚本的目录已锁定,以避免任何人出于自己的目的修改您的脚本,或者只是向他们显示未加密的凭据。
可以在以下位置找到一个C#程序示例,该程序可以从数据库中获取数据并输出为CSV:https://stackoverflow.com/a/24458994/361842
这非常好,因为编译后的文件比脚本更不容易附加(尽管请记住,如果正在使用调度程序运行该exe,则始终可以将其替换为其他exe)。 为避免这种情况,您可能需要编写此代码以作为服务运行。这里的更多信息:https://stackoverflow.com/a/503606/361842
答案 1 :(得分:0)
如果这些是您手动运行的报告,则建议您使用SQL GUI工具(我使用Navicat,但还有许多其他选项)。其中大多数功能都可以让您定义查询,甚至可以定义一些相当高级的报告,然后可以轻松地将其运行并导出为CSV。
如果要自动运行它们,则需要编写一些代码来执行任务。我建议Python比C#更容易做到这一点,但是在C#中肯定是可行的。为此,您需要为数据库找到合适的C#API(除非.NET内置了此功能-自从我在该领域工作以来已经有一段时间了),然后使用它来查询数据库。然后,使用可用的标准文件编写类来创建CSV文件应该相当简单。