Comment exécuter une procédure stockée chaque jour dans SQL Server Express Edition?

Comment est-il possible d'exécuter une procédure stockée à un moment précis chaque jour dans SQL Server Express Edition?

Notes:

  • Ceci est nécessaire pour tronquer une table de vérification
  • une alternative serait de modifier la requête insert mais c'est probablement moins efficace
  • SQL Server Express Edition n'ont pas l'Agent SQL Server

Questions Connexes:

  • Comment puis-je programmer une sauvegarde quotidienne avec SQl Server Express?
  • exécution programmée de la procédure stockée sur le serveur SQL
24
demandé sur Community 2009-11-04 20:00:50

10 réponses

puisque SQL Server express n'est pas fourni avec SQL Agent, vous pouvez utiliser Windows scheduler pour exécuter un SQLCMD avec un proc stocké ou un script SQL.

http://msdn.microsoft.com/en-us/library/ms162773.aspx

23
répondu Raj More 2009-11-04 17:03:36

j'ai trouvé que le mécanisme suivant fonctionnait pour moi.

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

quelques notes:

  • cela vaut la peine d'écrire une entrée de vérification quelque part pour que vous puissiez voir que la requête a réellement fonctionné.
  • le serveur doit redémarrer une fois pour s'assurer que le script tourne la première fois.
8
répondu Thomas Bratt 2009-11-20 09:46:08

si vous utilisez Express Edition, vous devrez utiliser Windows Scheduler ou l'application se connectant au serveur d'une manière ou d'une autre.

vous utiliseriez le scheduler pour exécuter sqlcmd. voici quelques instructions pour faire fonctionner le sqlcmd avec express edition.

4
répondu Yishai 2009-11-04 17:07:02

créer une tâche programmée qui appelle "C:\YourDirNameHere\TaskScript.vbs" au démarrage. VBScript devrait exécuter des tâches répétées (dans cet exemple, c'est une boucle de 15 minutes)

Via la ligne de commande (doit exécuter cmd.exe en tant qu'administrateur):

schtasks.exe /create /tn "TaskNameHere" /tr "\"C:\YourDirNameHere\TaskScript.vbs\" " /sc ONSTARTUP

Exemple TaskScript.vbs: ceci exécute votre script SQL personnalisé en silence en utilisant RunSQLScript.MTD

Do While 1
    WScript.Sleep(60000*15)
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.RUN "cmd /c C:\YourDirNameHere\RunSQLScript.bat C:\YourDirNameHere\Some_TSQL_Script.sql", 0
Loop

RunSQLScript.bat: ceci utilise sqlcmd pour appeler le instance de la base de données et exécuter le script SQL

@echo off
sqlcmd -S .\SQLEXPRESS -i %1
4
répondu VoteCoffee 2015-02-26 22:43:29

Planificateur SQL à partir de http://www.lazycoding.com/products.aspx

  • simple et Gratuit
  • supporte toutes les versions de SQL Server 2000, 2005 et 2008
  • prend en charge des instances de Serveur SQL illimitées avec un nombre illimité de tâches.
  • permet de programmer facilement les tâches de maintenance du serveur SQL: sauvegardes, reconstructions d'index, vérifications d'intégrité, etc.
  • fonctionne sous Windows Service
  • notifications par Email sur l'emploi, la réussite et l'échec
2
répondu Iman Abidi 2011-05-07 16:01:27

Puisqu'une autre question semblable a été posée, et sera probablement fermée en tant que duplicata de celle-ci, et il y a de nombreuses options qui ne sont pas mentionnées dans les réponses déjà présentées ici...

puisque vous utilisez SQL Express, vous ne pouvez pas utiliser SQL Server Agent. Cependant, il existe de nombreuses alternatives, tous que vous pouvez programmer en utilisant à ou Windows Task Scheduler en fonction de votre système d'exploitation:

tous ces langages/outils (et beaucoup d'autres) ont la capacité de se connecter au serveur SQL et d'exécuter une procédure stockée. Vous pouvez également essayer ces agents remplacements:

1
répondu Aaron Bertrand 2017-05-23 12:18:18

la façon la plus facile que j'ai trouvé pour aborder cette question Est de créer une requête qui exécute la procédure stockée puis la sauvegarder. La requête devrait ressembler à celle ci-dessous.

     use [database name]
     exec storedproc.sql

crée alors un fichier batch avec quelque chose de similaire au code ci-dessous.

sqlcmd -S servername\SQLExpress -i c:\expressmaint.sql

Alors le planificateur de tâches exécuter le lot aussi souvent que vous le souhaitez

1
répondu BrianMichaels 2014-09-22 13:44:18

vous pouvez utiliser le planificateur de tâches pour lancer une application de console simple qui exécuterait L'instruction Sql.

0
répondu Craig Bart 2009-11-04 17:05:14

comme vous l'avez correctement noté, sans le processus agent, vous aurez besoin de quelque chose d'extérieur au serveur, peut-être un service que vous écrivez et installez ou Windows scheduler.

notez qu'avec une installation Express pour une application locale, il est possible que la machine ne soit pas allumée au moment où vous voulez tronquer la table (disons que vous la Réglez pour tronquer chaque nuit à minuit, mais l'utilisateur n'a jamais sa machine allumée).

donc votre la tâche programmée n'est jamais exécutée et votre journal d'audit devient hors de contrôle (c'est aussi un problème avec SQL Server Agent, mais on pourrait supposer qu'un vrai serveur serait en cours d'exécution sans arrêt). Une meilleure stratégie si cette situation correspond à la vôtre pourrait être d'avoir l'application le faire à la demande quand il détecte qu'il a été plus de X jours depuis la troncature ou quelle que soit votre opération est.

une autre chose à regarder est si vous parlez d'une Application Web, il pourrait y avoir du temps lorsque l'application est chargée, et l'opération peut être effectuée lorsque cet événement se déclenche.

comme mentionné dans le commentaire, il y a sp_procoption - cela pourrait permettre à votre SP de fonctionner chaque fois que le moteur est démarré - les inconvénients de cette méthode sont que pour les cas à long terme, il pourrait y avoir un long temps entre les appels, et il a toujours des problèmes si le moteur ne fonctionne pas aux moments où vous avez besoin de l'opération à faire.

0
répondu Cade Roux 2009-11-20 14:39:31

notre société utilise également SQLEXPRESS et il n'y a pas D'Agent SQL.

Puisqu'il n'y a pas de réponse marquée comme "bon" et que toutes les solutions sont assez complexes, je vais partager ce que j'ai fait là-bas. C'est peut-être très mauvais, mais ça a bien marché pour moi.

j'ai choisi des opérations D'Insertion (les gens font) à une table qui a obtenu près de la même plage de temps que j'avais besoin et a fait un déclencheur" sur L'insertion " qui applique la fonction nécessaire.

0
répondu KennyKivi 2017-02-20 13:20:28