Muitas vezes temos a necessidade de executar algum processo como por exemplo, uma query para limpar uma tabela ou um processo de cópia de dados e seria interessante se este processo pudesse ser executado logo no inicialização do SQL Server. Pois bem, talves poucos saibam mas é possível configurar uma stored procedure para ser executa na inicialização do SQL Server. Isto é feito definindo a opção autoexecution para a procedure.
Antes de definir a opção autoexecution para uma prodedure, duas regrinhas devem ser seguidas:
1. A procedure a ser executada na inicialização deve ser criada no database master.
2. Antes de definir a opção autoexecution, a procedure já deve existir.
Seguida as regras, podemos então utilizar a procedure de sistema sp_procoption para definir a opção autoexecution para nossa procedure e com isso teremos a procedure sendo executada a cada vez que o SQL Server iniciar. A sintaxe para a utilização da sp_procoption é a seguinte.
sp_procoption @ProcName = ‘sua_procedure’,
@OptionName = ‘startup’,
@OptionValue = ‘on’
No exemplo acima, definimos a opção autoexecution para a procedure sua_procedure por atribuir o valor startup para @OptionName e on para @OptionValue. Após executar o statement acima a procedure sua_procedure será executada a cada vez que o SQL Server iniciar.
Quando quisermos remover a opção autoexecution de uma procedure, basta executar o statement definindo o valor off para @OptionValue.
sp_procoption @ProcName = ‘sua_procedure’,
@OptionName = ‘startup’,
@OptionValue = ‘off’
Ao executar o statement acima, a procedure sua_procedure não será mais executada na inicialização do SQL Server.
Agora você pode estar fazendo a seguinte pergunta: Como fazer para identificar se uma procedure está definida como autoexecution? É simples, toda procedure possui uma propriedade chamada ExecIsStartup a qual indica se a procedure está definida como autoexecution ou não. Para consultar esta propriedade devemos utilizar a função de sistema OBJECTPROPERTY().
No exemplo abaixo, verificamos se a procedure sua_procedure está definida para autoexecution ou não. Quando o valor retornado for 1, indica que a procedure está definida como autoexecution e portanto será executada na inicialização do SQL Server, quando o valor retornado for 0 a procedure não está definida como autoexecution.
SELECT OBJECTPROPERTY(OBJECT_ID(‘sua_procedure’),’ExecIsStartup’)
OU
USE master
GO
IF OBJECTPROPERTY (object_id(‘sua_procedure’),’ExecIsStartup’) = 1
print ‘A procedure sua_procedure será executada na inicialização’
ELSE
print ‘A procedure sua_procedure não será executada na inicialização’
Executando na inicialização do SQL Server Agent
Para executar um processo ou uma procedure na inicialização do SQL Server Agent, já não utilizamos mais a procedure de sistema sp_procoption. No caso do SQL Agent devemos primeiramente criar um Job para executar o processo ou a procedure. Estando o Job criado, definimos então a opção Schedule Type como Start automatically when SQL Server Agent starts.
Para definir o Job para ser executado na inicialização do SQL Agent faça o seguinte:
1. No Enterprise Manager, localize Management/SQL Server Agent/Jobs
2. Crie um novo Job ou clique com o botão direito sobre um Job existente e selecione Propriedades
3. Na guia Schedules, crie um novo schedule ou edite um já existente
4. Em Schedule Type, selecione a opção Start automatically when SQL Server Agent starts.
Pronto, com isso o job será executado automaticamente a cada vez que o SQL Server Agent iniciar.
Bom pessoal, caso alguém tenha a necessidade de executar algum processo na inicialização do SQL Server ou SQL Server Agent, esta dica deve resolver o problema. Detalhe, os procedimentos também são válidos para o SQL Server 2005.
Um abraço a todos
Nilton Pinheiro

