J'ai un SQL standard que je lance sur plusieurs bases de données sur un seul serveur pour m'aider à diagnostiquer les problèmes:
select
so.name,
so.type,
MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant,
@@ServerName as Server,
DB_Name() as DBName
from
sysobjects so with (nolock)
join syscomments sc with (nolock) on so.id = sc.id
where (sc.text like '%emote%')
group by so.name, so.type
order by so.type, so.name
Comment puis-je l'exécuter sur toutes les bases de données sur un seul serveur? (en plus de se connecter manuellement à un à la fois et de l'exécuter)
sql-server
Andrew Bickerton
la source
la source
Réponses:
sp_MSForEachDB
Une option est sp_MSForEachDB . C'est non documenté mais néanmoins utile
Une recherche sur les interwebs a beaucoup d'autres exemples aussi
Note: Étant une fonction non supportée (qui a quelques bugs connus), vous voudrez peut-être écrire votre propre version (merci @Pradeep)
L'exemple SQL ci-dessus devrait être restructuré comme suit:
REMARQUES:
la source
, ''?'' AS DBName
à n'importe quelle instruction select. Selon mon exempleJuste mon $ 0,05: SQL Multi Script (exécution de plusieurs scripts sur plusieurs serveurs SQL).
la source
SSMS Tools Pack le fait très bien et est gratuit pour les serveurs de base de données antérieurs à 2012. La fonctionnalité: "Exécuter sur plusieurs cibles" - http://www.ssmstoolspack.com/Features?f=6
la source
Il existe une autre méthode permettant d'obtenir une sortie dans un seul jeu de résultats semi-fusionné. Commencez par ouvrir les serveurs enregistrés et créez un nouveau groupe sous Groupes de serveurs locaux, puis enregistrez votre serveur une fois pour chaque base de données, en définissant dans chaque cas la base de données par défaut comme celle souhaitée.
Une fois terminé, cliquez avec le bouton droit sur votre groupe et sélectionnez Nouvelle requête. La fenêtre de requête qui s'ouvre aura "plusieurs" où vous verrez normalement un nom de serveur sur la barre d'état. Toutes les requêtes exécutées dans cette fenêtre fonctionneront sur chaque serveur enregistré qui faisait partie du groupe. La première colonne des résultats sera le nom du serveur enregistré. L'ensemble de résultats sera fragmenté par cette première colonne et l'ordre par testaments ne fonctionnera que dans ce fragment.
Fonctionnalité très puissante mais négligée lorsque vous devez régulièrement exécuter le même code SQL sur plusieurs serveurs.
la source
Ma société a développé un outil appelé xSQL Script Executor . C'est gratuit pour un usage personnel, et pour moi, le déploiement de scripts sur plusieurs cibles est très facile.
la source
J'ai développé cet outil: https://github.com/andreujuanc/TakoDeploy
Je suis encore en train d'écrire quelques lignes dessus, mais c'est assez stable maintenant. Je l'ai utilisé contre des bases de données de production et fonctionne à merveille.
la source