使用 Windows 任务计划程序执行存储过程
Posted
技术标签:
【中文标题】使用 Windows 任务计划程序执行存储过程【英文标题】:Executing a stored procedure using Windows task Scheduler 【发布时间】:2012-12-28 13:33:45 【问题描述】:我一直在尝试设置一个计划,以便在 Windows 任务计划程序中每小时运行一个存储过程(因为我正在使用 SQL Express 并且无法安装第 3 方工具),但是在尝试了各种方法之后,例如运行来自任务调度程序的 .bat 文件,从任务调度程序打开 SqlCmd 实用程序并传递命令行语法或 .sql 脚本文件我没有运气。
我知道这是可以做到的,因此我确信这是我错过的东西,但如果有人能分享他们的经验,我将非常感激。
以下命令在批处理文件中...
sqlcmd -E -i"C:\Users\Administrator\Desktop\test.sql" -o"C:\Users\Administrator\Desktop\dump.txt"
非常感谢
【问题讨论】:
使用 sqlcmd 看起来很合理。为什么你在那个上失败了? 看起来很有帮助:***.com/questions/3794897/… 运行 SQLCMD 的 .bat 文件不起作用怎么办?给我们详细信息。 不确定 - 目前该操作会打开 SqlCmd 实用程序“C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE”,并且在参数字段中我有 sqlcmd - E -i"C:\Users\Administrator\Desktop\test.sql" -o"C:\Users\Administrator\Desktop\dump.txt" 据我了解,-E 表示受信任的“连接”,不定义服务器 (-S) 表示它将选择默认实例。在 sql 脚本文件中,我只有 EXEC databasename.dbo.storedprocedurename,当我在 sqlcmd 实用程序中手动输入它时,它可以工作,但是当我在任务上单击“运行”时,什么也没有发生 - 不确定它是否在做任何事情,但什么也没有出现在表和我指定为输出的 dump.txt 文件中没有创建,所以我猜它什么也没做 【参考方案1】:如果您是 sql 实例的管理员(因为您使用的是 SQLExpress,我敢打赌您正尝试在自己的计算机上执行此操作,因此您的用户很有可能是 sql 实例的管理员)您不应该使用-E 完全没有,忽略它。
其次,即使在本地工作也要指定服务器。
从一个简单的 sql 命令开始,如下所示:
sqlcmd.exe -S "." -d MY_DATABASE -Q "SELECT * FROM MY_TABLE"
将 MY_DATABASE 和 MY_TABLE 替换为您的数据库名和表名。确保您可以从命令行运行它。它应该从您的表中返回数据。 (注意命令行选项区分大小写,所以 -s 与 -S 不同)
最后,不要尝试通过任务调度程序提供参数。将带有所有参数的命令放在 .bat 文件中,然后从任务调度程序运行批处理。
【讨论】:
不,我已经远程连接到 SQL Server 所在的计算机,而不是尝试在本地执行此操作。我会试试你的建议,但关于批处理文件 - 该文件的外观如何? SQLExpress 默认配置为拒绝远程连接。你确定你可以从你的机器连接到那个远程 SQLExpress 吗?例如,您可以尝试使用 Management Studio 是的,我可以从我自己机器上的管理工作室连接到它 所以我还是建议忽略 -E 参数,用 -S 指定服务器,分别用 -U 和 -P 指定用户名和密码。首先忘记调度并确保您可以从命令行运行命令。 让我们continue this discussion in chat【参考方案2】:我最近遇到了类似的问题,我的经验可能会对您有所帮助。我正在调用一个小应用程序,即批处理文件中的 EXE。我正在安排批处理文件从 Windows 任务计划程序运行。该应用程序正在使用 Windows 身份验证访问 SQL 数据。 我可以直接运行应用程序,即单击 EXE 运行它。 我可以从批处理文件运行应用程序。 但是,如果我尝试运行计划任务,它似乎开始但什么也没做,也没有发布我能找到的错误。 我发现如果我将应用程序更改为使用 SQL 身份验证运行,它可以从任务计划程序运行。
我怀疑当 Windows 身份验证从 SQL 无法识别的任务计划程序运行时,它的上下文存在某些问题。
【讨论】:
以上是关于使用 Windows 任务计划程序执行存储过程的主要内容,如果未能解决你的问题,请参考以下文章