2009-08-12 9 views
0

J'utilise SQL Server 2000 et je veux écrire une requête simple pour retourner le nom de toutes les bases de données ne contenant pas equipmentpropertyid nombre au-dessus de 905 dans le defs_equipmentpropertytable. Nous avons une centaine de bases de données actives contenant toutes les mêmes tables. Malheureusement, le defs_equipmentpropertytable est à jour dans la plupart des bases de données, mais pas tous. J'ai besoin de savoir quelles bases de données ont besoin d'avoir cette table particulière mise à jour. Nous avons un outil qui va rechercher toutes les bases de données, j'ai juste besoin de la syntaxe correcte pour la requête.Recherche de bases de données

Quelqu'un peut-il aider?

Merci.

Répondre

0

Quelqu'un peut mentionner la procédure stockée non documentée sp_msforeachdb, qui peut le faire. Cependant, je vous suggère d'écrire une requête pour générer le SQL vous-même, puis exécutez-le. Quelque chose comme ceci devrait fonctionner:

declare @query nvarchar(400); 
set @query = N' 
select top 1 ''Found in '' + %%% as r 
from $$$.dbo.defs_equipmentpropertytable 
where equipmentpropertyid > 905 
go 
'; 
select replace(replace(@query,'$$$',quotename(name)),'%%%',quotename(name,'''')) 
from master..sysdatabases 

Exécutez ceci, puis copiez le résultat dans une fenêtre de requête et exécutez le résultat. Vous pouvez également filtrer toutes les bases de données que vous ne voulez pas. Je suggère fortement ceci au lieu de sp_MSforeachdb, parce que cela vous donne la chance d'inspecter votre SQL avant de l'exécuter, et c'est une bonne habitude pour éviter l'injection SQL, sans parler des erreurs.

Je l'avais à l'envers. Est-ce que ça marche?

declare @query nvarchar(400); 
set @query = N' 
if not exists (
    select * 
    from $$$.dbo.defs_equipmentpropertytable 
    where equipmentpropertyid > 905 
) select %%% + 'is not up to date' as r 
go 
'; 
select replace(replace(@query,'$$$',quotename(name)),'%%%',quotename(name,'''')) 
from master..sysdatabases 
+0

Cela fonctionne pour fournir une liste de bases de données qui sont à jour. J'ai besoin de bases de données qui ne sont pas à jour ... celles que je dois corriger. J'ai un outil pour rechercher dans toutes les bases de données, j'ai juste besoin de la syntaxe correcte ... exemple: si n'existe pas (sélectionnez * from defs_equipmentpropertytable où equipmentpropertyid> 905) ... cela ne fonctionne pas. –

+0

Je suppose que je l'avais à l'envers. La deuxième requête crée-t-elle les bonnes requêtes à exécuter? –

0

Cette requête devrait faire ce que vous avez besoin, si l'outil fait tout pour vous la recherche; il retournera le nom de la base de données si la propriété MAX < = 905.

SELECT DB_NAME() as DatabaseName 
FROM dbo.defs_equipmentpropertytable 
HAVING MAX(equipmentpropertyid) <= 905 

Espérons que vous obtenez ce dont vous avez besoin. Si votre outil d'exploration de base de données ne fonctionne pas avec cela, vous pouvez certainement utiliser la méthode fournie par Steve.

Questions connexes