|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Christophe RahierIngénieur systèmes et réseaux Inscription : mai 2011 Messages : 9 ![]() |
Bonjour,
Je dois réaliser un script mais je ne sais pas comment l'aborder. En fait, sur mon serveur, j'ai plusieurs DB. Ce que j'aimerais c'est parcourir toutes les DB dont le nom contient "logs", j'ai donc fait ceci : Code :
Code :
Maintenant, je ne sais pas comment imbriquer tout ça, je ne vois pas comment faire les boucles puis un "USE" pour dire dans quelle DB je vais agir. Je suis perdu! Merci d'avance pour votre aide, Christophe |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Dans votre premier bout code, si votre requête vous renvoi plusieurs lignes (plusieurs nom de BDD contenant "logs"), votre variable se verra affecter un et un seul nom. Vous ne devez pas utiliser un VARCHAR. Il y a plusieurs approches pour ce que vous semblez vouloir faire, pourriez vous préciser le type de traitement que vous voulez effectuer, ça nous aidera à vous orienter vers une solution adaptée. |
|
|
00
|
|
|
#3 | ||
|
Invité régulier
![]() Christophe RahierIngénieur systèmes et réseaux Inscription : mai 2011 Messages : 9 ![]() |
Bonjour,
J'avoue que je cherche dans tous les sens mais je n'ai pas l'habitude :-( En fait, pour chaque table de chaque DB, je dois supprimer les records qui seraient des doublons. J'ai une requête qui le fait : Code :
Merci, Christophe |
||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Evitez d'utiliser les vues systèmes elle ne présentent pas toute l'information et sont complexes à manipuler. Utilisez les vues de la norme SQL INFORMATION_SCHEMA.
En particulier dans INFORMATION_SCHEMA.TABLES vous aurez la liste des tables de chaque base avec le nom de la base et le préfixe de schéma. Pour voir comment traiter toutes les bases d'un coup jettez un coup d'oeil à la procédure SP_SEARCH_STRING_ANYFIELD_ANYTABLE que j'ai écrit ici : http://sqlpro.developpez.com/cours/s...r/transactsql/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 |
|
Invité régulier
![]() Christophe RahierIngénieur systèmes et réseaux Inscription : mai 2011 Messages : 9 ![]() |
Bonjour,
Merci pour votre réponse. Cependant, ce que j'aimerais faire est-il réalisable directement en SQL ou faut-il écrire une petite application pour cela ? Tout ça est très nébuleux pour moi. Christophe |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
C'est possible en TSQL
ce bout de code devrait écrire vos requetes pour toutes les tables de la base sur laquelle vous êtes connecté. Je fais un print, mais vous pouvez faire un sp_executesql. Avec un curseur, vous pouvez le faire sur toutes vos BDD... Attention, ce type d’opération peut toutefois mettre à mal votre serveur si vous avez de grosse tables, et que vous n'avez pas les index nécessaires, c'est donc a compléter et a tester avant de lancer ça en prod ![]() D'autre part, pour simplifier l'exemple, j'ai considéré que la première colonne de chaque table était la clef primaire, mais il faudrait modifier le ORDER BY en fonction de vos vraies clefs primaires, que vous trouverez dans INFORMATION_SCHEMA.TABLE_CONSTRAINTS... bref, c'est un début, à vous de jouer Code SQL :
|
||
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Christophe RahierIngénieur systèmes et réseaux Inscription : mai 2011 Messages : 9 ![]() |
En effet, je vais repasser sur les différentes DB pour voir si tout est OK.
Je débarque dans le projet, je ne suis pas le concepteur des DB ni des tables, pas toujours facile de s'y retrouver. Merci pour l'aide en tout cas, je vais tester dans un environnement de test ! |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Christophe RahierIngénieur systèmes et réseaux Inscription : mai 2011 Messages : 9 ![]() |
Bonjour,
Le script est génial, merci beaucoup. Mais dans l'hypothèse ou ma comparaison pour le delete des doublons ne se fait pas sur tout les champs mais sur une certaine partie, puis-je "exclure" des champs de la liste ? Christophe |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Oui, vous pouvez ajouter un filtre à la requête pour ne pas prendre en compte ces colonnes.
sur le principe : Code SQL :
|
||
|
|
00
|
|
|
#10 |
|
Invité régulier
![]() Christophe RahierIngénieur systèmes et réseaux Inscription : mai 2011 Messages : 9 ![]() |
Merci beaucoup, je ne connaissais pas ce système pour exclure des champs.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com