Exécuter automatiquement la requête dans MS SQL Studio toutes les heures

13

Je prends en charge une application dans une grande entreprise, l'un de mes rôles est de nettoyer les données. Il y a une requête que je dois exécuter toutes les heures et je voudrais l'automatiser. En raison des stratégies d'organisation, je ne peux pas créer de travaux SQL Server Agent ou modifier le schéma, je ne peux que manipuler des données.

Un sans fin

WHILE(1=1)
BEGIN 
WAITFOR DELAY '01:00';
--do work
END

fait le travail pour moi, mais je hausse les épaules à l'idée d'une connexion perma-open.

Idéalement, je scripterais le MS SS lui-même pour exécuter un morceau de code donné toutes les heures, mais je ne sais pas si c'est possible.

Y-a t'il une solution à ce problème?

Ivan Koshelev
la source
1
Pouvez-vous utiliser le sceduler Windows sur votre PC?
septembre
12
Demandez à quelqu'un qui a la permission de le planifier pour vous.
Monsieur Magoo
@sepupic C'est mon prochain terrain de recherche, si rien dans MS SS ne peut m'aider.
Ivan Koshelev
Je suis d'accord. Je me sentirais très mal à l'aise d'exécuter du code en boucle sur mon ordinateur client. Que se passe-t-il si votre PC tombe en panne, que quelqu'un le débranche, etc. J'ai travaillé dans des environnements similaires où les tâches SQL n'étaient pas disponibles pour les équipes d'applications - parce que nous avions une option alternative d'utiliser AutoSys ou un autre outil de planification fonctionnant sur un serveur d'applications. Essayez de savoir comment les autres tâches planifiées sont gérées? Une autre solution de contournement peut être d'utiliser SQL Server Reporting Services ? Pas idéal je sais ...
Terry C
9
La bonne solution consiste à accéder aux administrateurs de base de données et à les faire créer un travail SQL Server Agent pour exécuter ce nettoyage toutes les heures. Ensuite , savoir pourquoi vous obtenez des données dans la base de données que les besoins « nettoyage » si souvent et se que fixes.
alroc

Réponses:

22

Votre ami est sqlcmd (Microsoft Technet)

  1. Créez un fichier SQL avec le script requis pour exécuter votre travail de nettoyage
  2. Exécutez le script avec sqlcmd.exe et tous les paramètres requis
  3. Créez une tâche planifiée Windows et ajoutez la commande avec tous les paramètres requis

Par exemple

sqlcmd -d YOUR_DB -E -i YOUR_SCRIPT.SQL -o OUTPUTFILE.TXT 

Bonne chance.

John aka hot2use
la source
4
Assurez-vous que ces scripts sont placés sur un serveur d'applications / d'outils approprié quelque part avec la tâche planifiée et non sur l'ordinateur de développement.
GER
7

Vous n'avez pas besoin de Management Studio pour exécuter des requêtes.

Si vous n'avez vraiment aucune option pour que quelqu'un planifie un travail pour vous, vous devriez examiner sqlcmd comme indiqué dans la réponse de hot2use

Si vous êtes sur une version où cela n'est pas supporté (puisque vous n'avez pas spécifié de version) il y a aussi osql qui est un client de ligne de commande, mais cet outil est obsolète.

Vous pouvez ensuite planifier une commande à l'aide du planificateur de votre choix (planificateur de tâches Windows par exemple) et exécuter quelque chose comme ceci:

OSQL -E -i c:\temp\dowork.sql

Jetez un œil à la documentation pour voir quelles options vous avez pour la sélection et l'authentification du serveur.

Tom V - essayez topanswers.xyz
la source
-1

Utiliser "SQL Server Agent" qui se trouve dans MS SQL studio (dans l'explorateur d'objets, développez votre serveur et il devrait normalement être au bas de la liste) est probablement votre meilleur pari.

Cela créera un travail qui peut être configuré pour s'exécuter à des intervalles définis. Les travaux s'exécuteront en tant que service sur le serveur plutôt que sur le client. Cela signifie que si votre client se déconnecte, il s'exécutera toujours et si le serveur est redémarré (pour une raison inconnue), le travail continuera à s'exécuter sans que vous ayez besoin de le réinitialiser.

L'inconvénient est que vous aurez probablement besoin de droits d'accès élevés pour pouvoir le faire.

tc
la source
3
Vous avez probablement oublié ce bit dans la question: en raison des stratégies d'organisation, je ne peux pas créer de travaux d'agent SQL Server [...]
Andriy M
@Andriy: C'est toujours la bonne réponse. Nous ne devrions pas aider les gens à faire du shadow IT contrairement aux désirs de leur organisation.
Dylan Knoll
1
@DylanKnoll: Eh bien, je pense qu'il serait parfaitement logique pour le répondeur de reconnaître que le PO mentionne la politique et d'inclure des arguments contre sa stupidité (quelque chose dans le sens de votre commentaire, par exemple), mais "ne devrait pas aider"? L'option suggérée et acceptée ne semble pas trop atroce, donc s'en tenir aux principes semblerait un peu dur dans ce cas.
Andriy M
Je comprends également votre point de vue, mais qu'en est-il de la perspective des administrateurs de base de données? Cela ressemble beaucoup à quelqu'un qui essaie de cacher des erreurs dans la conception de DB afin qu'elles ne soient pas mises en lumière.
Dylan Knoll
1
Il a lu «travaux de serveur SQL» avant d'être remplacé par «travaux d'agent SQL Server». Je ne pense pas qu'il puisse y avoir un autre sens pour le premier que pour le second. (Ce n'est pas le PO qui a édité cela, soit dit en passant; c'est une personne qui a compris le terme légèrement erroné exactement comme je le ferais, et l'a corrigé.) Le libellé original, cependant, est encore plus facile à ignorer, alors, d'une manière ou d'une autre, je maintiens toujours que c'était un oubli de votre côté :)
Andriy M