Execução agendada do procedimento armazenado no servidor SQL

é possível configurar de alguma forma o servidor SQL da Microsoft para executar um procedimento armazenado regularmente?

Author: marc_s, 2008-11-13

8 answers

SIM, no servidor de MS SQL, você pode criar empregos agendados. Em Sql Management Studio, navegue até o servidor, em seguida, expandir o item de agente do servidor SQL, e, finalmente, a pasta de tarefas para ver, editar, adicionar tarefas agendadas.

 92
Author: Jeb, 2011-12-14 16:20:16

Se a edição MS SQL Server Express estiver a ser usada, então o agente do servidor SQL não está disponível. Encontrei o seguinte trabalho para todas as edições:

USE Master
GO

IF  EXISTS( SELECT *
            FROM sys.objects
            WHERE object_id = OBJECT_ID(N'[dbo].[MyBackgroundTask]')
            AND type in (N'P', N'PC'))
    DROP PROCEDURE [dbo].[MyBackgroundTask]
GO

CREATE PROCEDURE MyBackgroundTask
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- The interval between cleanup attempts
    declare @timeToRun nvarchar(50)
    set @timeToRun = '03:33:33'

    while 1 = 1
    begin
        waitfor time @timeToRun
        begin
            execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure];
        end
    end
END
GO

-- Run the procedure when the master database starts.
sp_procoption    @ProcName = 'MyBackgroundTask',
                @OptionName = 'startup',
                @OptionValue = 'on'
GO

Algumas notas:

 35
Author: Thomas Bratt, 2017-05-23 12:34:41

Sim, se usar o agente do servidor SQL.

Abra o seu gestor da empresa e vá para a pasta de gestão sob a instância do servidor SQL em que está interessado. Lá você vai ver o agente do servidor SQL, e por baixo disso você vai ver uma seção de trabalhos.

Aqui você pode criar um novo emprego e você vai ver uma lista de passos que você vai precisar criar. Quando criar um novo passo, poderá indicar o passo para executar de facto um procedimento armazenado (escreva TSQL Script). Escolha a base de dados, e depois, para a secção de comandos, coloque algo como:

exec MyStoredProcedure
Essa é a visão geral, poste aqui se precisar de mais conselhos. Na verdade, pensei que podia entrar primeiro nesta, rapaz estava errado.
 17
Author: Ciaran Archer, 2008-11-13 14:35:44

Provavelmente não é a resposta que procura, mas acho mais útil simplesmente usar o escalonador de Tarefas do servidor de Windows

Pode usar directamente o comando sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"

Ou mesmo criar um ficheiro .bat. Para que você possa até 2x clique sobre a tarefa sob demanda.

Isto também foi abordado aqui.
 7
Author: percebus, 2017-05-23 11:47:25
Vou acrescentar uma coisa, onde estou, costumávamos ter um monte de trabalhos em lotes que corriam todas as noites. No entanto, estamos nos mudando disso para usar um aplicativo cliente agendado em tarefas do windows agendadas que iniciam cada trabalho. Existem (pelo menos) três razões para isso:
    Temos alguns programas de consola que também precisam de ser executados todas as noites. Desta forma, todas as tarefas agendadas podem estar em um só lugar. É claro que isso cria um único ponto de fracasso, mas se os postos de trabalho do console não fujas, vamos perder um dia de trabalho no dia seguinte.
  1. o programa que inicia as tarefas captura mensagens de impressão e erros do servidor e escreve-os para um registo de Aplicação comum para todos os nossos processos em lote. Torna o logging dos trabalhos sql muito mais simples.
  2. Se alguma vez precisarmos de actualizar o servidor (e esperamos fazê-lo em breve) não precisamos de nos preocupar em mudar os trabalhos. Redirecciona a aplicação uma vez.
É muito curto. VB.Net app: posso postar o código se alguém estiver interessado.
 6
Author: Joel Coehoorn, 2008-11-14 14:50:59

Usando o Management Studio - você pode criar um emprego (unter SQL Server Agent) Uma tarefa pode incluir várias etapas dos programas T-SQL até aos pacotes SSIS

O Jeb era mais rápido.
 4
Author: Bluenuance, 2008-11-13 14:28:32

Podias usar SQL Server Service Broker para criar um mecanismo personalizado.

Ideia (simplificada):

  1. Escreva um procedimento/gatilho armazenado que inicia uma conversa ( a janela de Início ) como loopback (do my_service ao my_service) - get conversation handler

    DECLARE @dialog UNIQUEIDENTIFIER;
    
    BEGIN DIALOG CONVERSATION @dialog
            FROM SERVICE   [name] 
            TO SERVICE      'name' 
            ...;
    
  2. Inicie o temporizador de conversa

    DECLARE @time INT;
    BEGIN CONVERSATION TIMER (@dialog)  TIMEOUT = @time;
    
  3. Após um determinado número de segundos, uma mensagem será enviada para um serviço. Será colocado em fila de espera com a fila associada.

    CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF
                 , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name>
                 , MAX_QUEUE_READERS = 20, EXECUTE AS N'dbo')
                  , POISON_MESSAGE_HANDLING (STATUS = ON) 
    
  4. O procedimento irá executar um código específico e um temporizador reanalisável para disparar novamente.


Pode encontrar uma solução totalmente cozida (T-SQL) escrita por Michał Gołoś chamada Escalonador de Tarefas

Pontos-Chave do blog:

Prós:

  • suportado em cada versão (do Expresso à empresa). A tarefa de agente do servidor SQL não está disponível para o servidor SQL Expresso
  • Scoped to database level. Você poderia facilmente mover a base de dados com tarefas associadas (especialmente quando você tem que mover cerca de 100 trabalhos de um ambiente para outro)
  • privilégios mais baixos necessários para ver / manipular tarefas (nível da base de Dados)

Distinção proposta:

Agente do servidor SQL (Manutenção):

  • cópias de segurança
  • índice/estatísticas reconstrói
  • replicação

Escalonador de Tarefas (negócios processos):

  • remover dados antigos
  • pré-agregações / recalculações cíclicas
  • desnormalização

Como configurar:

  • obter o código-fonte da secção: "Do pobrania" - para transferir (activar o broker/configurar o esquema tsks/configuration table + gatilhos + procedimento armazenado)/configurar as coisas de corretagem)
  • configurar a tabela de configuração [tsks].[tsksx_task_scheduler] para adicionar novas tarefas (os nomes das colunas são auto-descritivos, a tarefa de exemplo incluido)

Atenção: O Blog está escrito em polonês, mas o código fonte associado é em inglês e é fácil de seguir.

Aviso 2: antes de o utilizar, certifique-se de que o testou em ambiente de não produção.

 4
Author: Lukasz Szozda, 2018-08-30 15:12:48

Você deve olhar para uma tarefa agendada usando o agente do servidor SQL .

 3
Author: Cade Roux, 2008-11-13 14:28:54