从SQL脚本执行CMD的最佳方法

时间:2016-11-18 11:55:58

标签: sql-server vba tsql sql-server-2016

我想使用从存储过程调用的vba脚本生成一些excel报告。我的团队得到了几乎相同的BI解决方案,之前他们使用的VBA脚本打开了带有宏的excel文件。

报告生成过程遵循以下路径:

从每周预定作业执行SQL存储过程,我们调用另一个准备和计算数据的程序,然后打开 下面提供的脚本运行excel。

以下是此脚本的外观:

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("E:\Path\To\Excel.xlsm")

我们以这种方式调用此脚本:

EXEC master..xp_cmdshell 'C:\WINDOWS\SysWOW64\WSCRIPT.EXE Z:\Path\To\Script.vbs'

我在使用WSCRIPT.EXE时遇到了一些问题,在打开报表时它已经悬空,当我在寻找解决方案时,我已经阅读了很多关于不使用XP_CMDSHELL的内容。问题是:有没有办法避免使用XP_CMDSHELL而不是从头开始创建报告生成路径?我有点急,所以我没有时间写新程序等。

1 个答案:

答案 0 :(得分:1)

最好的方法是不通过sql server运行脚本。主要原因是安全性,错误处理和易于管理(例如,当您只想运行一个部件时)。

你应该尝试从你的应用程序中获取数据库中的数据(在你的例子中它是xlsx文件 - 这不是sql server programaticaly的运行程序)。如果必须安排它而不是使用作业代理或任务调度程序(一个作业/任务包含更多部分)或创建ssis包,或者通过链接服务器/ openrowset有方法如何直接将数据写入excel。

但是当你使用适当的错误处理时,它也可以在xp_cmdshell中。