启动时运行 MS SQL Server 脚本

Joo*_*Dui 5 sql sql-server batch-file sql-server-2008 google-cloud-sql

当我启动(或重新启动)我的 Windows 2012 R2 服务器实例(Google Cloud Server)时,我尝试运行 SQL 脚本。我使用 SQL 脚本、批处理文件和任务调度程序来执行此操作。

为了测试,我创建了一个简单的 SQL 脚本,将日期戳添加到表中:

USE <Databasename>
GO

INSERT INTO testingTable(time_Stamp)
VALUES (GETDATE())

SELECT * FROM testingTable
Run Code Online (Sandbox Code Playgroud)

(其中Databasename显然包含特定数据库的名称)

批处理文件如下所示:

sqlcmd -S <servername> -i "C:\Temp\testQuery.sql" > C:\Temp\output.txt
Run Code Online (Sandbox Code Playgroud)

我将所有内容输出到文本文件。当我运行批处理文件时,输出看起来不错:它打印一个列表,其中包含我运行此 SQL 查询的所有时间并将其保存在文本文件中。

我已安排此任务在启动时运行(按照此处的步骤操作: https: //www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html)。我在这里尝试了一系列设置,但似乎没有任何效果,包括论坛中突出显示的确切设置。

当我现在重新启动服务器时,输出文件显示以下错误消息:

Msg 904, Level 16, State 3, Server <servername>, Line 1
Database 7 cannot be autostarted during server shutdown or startup.
Msg 208, Level 16, State 1, Server <servername>, Line 2
Invalid object name 'testingTable'.
Run Code Online (Sandbox Code Playgroud)

似乎 MS SQL 不允许在登录用户帐户之一之前运行脚本。

问题确实在于,我想要运行的实际 SQL 任务必须在清晨运行,以便在每个人都到达办公室时完成它们。我已成功使用 VMPower 自动启动服务器,但无法自动登录其中一个帐户。

我希望有人能给我一些关于如何解决这个问题的反馈。最好我希望我当前的设置能够工作,但如果有人知道如何自动登录现有谷歌云服务器实例上的帐户,那也会非常有帮助。

谢谢你,乔斯特

ken*_*orb 2

SQL Server提供了系统存储过程sp_procoption,可以用来指定一个或多个存储过程在SQL Server服务启动时自动执行。

例如,您的数据库中可能有一个昂贵的查询,该查询在首次执行时需要一些时间才能运行。使用sp_procoption,您可以在服务器启动时运行此查询来预编译执行计划,这样您的用户就不会成为第一个运行此特定查询的不幸的灵魂。我已经使用此功能来设置我编写的脚本的 Profiler 服务器端跟踪的自动执行。脚本化跟踪是存储过程的一部分,该存储过程设置为在服务器启动时自动执行。

exec sp_procoption @ProcName = ['stored procedure name'], 
@OptionName = 'STARTUP', 
@OptionValue = [on|off]
Run Code Online (Sandbox Code Playgroud)

了解更多:在 SQL Server 启动时自动运行存储过程


码头工人

有关 MSSQL Docker 映像的解决方案,请参阅:SQL Server Docker 容器在安装后停止