在SQL Server启动时自动执行存储过程。
前端之家收集整理的这篇文章主要介绍了
在SQL Server启动时自动执行存储过程。,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sql Server提供了系统存储过程sp_procoption,这个存储过程可以用于当sql Server服务启动时指派一个或者多个存储过程自动执行。这是一个很不错的选择,它可以用于多种多样的用途。比如,你可能在你的数据库中有开销很大的查询,这个查询在首次执行时会花费一些时间。通过使用sp_procoption,你可以在服务器启动时运行这个查询以此来预先编译执行计划,由此,你的某个用户就不会成为第一个运行这个特殊查询的不幸的人。我曾经用这个功能建立了一个我自己写的概要分析器服务器端跟踪的自动执行功能,这个跟踪功能成为服务器启动时被设置成自动执行的存储过程的一部分。
<div class="codetitle"><a style="CURSOR: pointer" data="88605" class="copybut" id="copybut88605" onclick="doCopy('code88605')"> 代码如下:
<div class="codebody" id="code88605">
sp_procoption Parameters
exec sp_procoption @ProcName = ['stored procedure name'],
@OptionName = 'STARTUP',
@OptionValue = [on|off]
以下是sp_procoption存储过程参数的解释: l 参数@ProcName的意思是明显的,它是被
标记成
自动执行的过程的
名称。 l 参数@OptionName是可选用项,唯一有效的选项是STARTUP。 l 参数@OptionValue切换
自动执行的开与关。 使用有特定限制的sp_procoption: l 你必须以系统
管理员的身份
登录服务器并使用sp_procoption。 l 你只能指派标准存储过程、扩展存储过程或者CLR存储过程来启动。 l 存储过程必须在主从
数据库上。 l 存储过程不能要求任何输入参数或者返回任何
输出参数。 在下面的例子中,我创建一个存储过程,每次启动我的
sql Server实例时,这个存储过程就
自动执行。这个存储过程的目的是在记录服务启动时间的
数据库表中写一行。通过这张
数据库表,我产生一个获得服务器正常运行时间的想法。以下的脚本创建了一个新的
数据库,这个
数据库存储了一张叫做SERVER_STARTUP_LOG的公制表。这张表保留了上次服务器启动的日期和时间。一旦建立了这个基本的架构,我就创建存储过程,在服务器启动时,这个存储过程将用于把日期和时间插入到表中。注意,存储过程是在主从
数据库上创建的。 <div class="codetitle">
<a style="CURSOR: pointer" data="80319" class="copybut" id="copybut80319" onclick="doCopy('code80319')"> 代码如下:
<div class="codebody" id="code80319">
USE MASTER
GO
CREATE DATABASE SERVER_METRICS
GO
USE SERVER_METRICS
GO
CREATE table DBO.SERVER_STARTUP_LOG
(
LOGID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
START_TIME DATETIME NOT NULL
CONSTRAINT DF_START_TIME DEFAULT GETDATE()
)
GO
USE MASTER
GO
CREATE PROCEDURE DBO.LOG_SERVER_START
AS
SET NOCOUNT ON
PRINT '
LOGGING SERVER STARTUP TIME '
INSERT INTO SERVER_METRICS.DBO.SERVER_STARTUP_LOG DEFAULT VALUES
GO
,我们可以看到sp_configure高级选项'scan for startup procs'需要被设置。这些操作不需要手动去做,运行sp_procoption会