2009-04-16 10 views
1

Désolé tout le monde. Il semble que je suis un imbécile! La requête fonctionne bien quand je l'exécute contre la base de données en direct par rapport à ma base de données de test ... je dois faire plus attention à ce genre de choses!Problème avec l'instruction Count pour plusieurs bases de données

J'ai un problème avec l'instruction ci-dessous. Cela fonctionne bien si je l'exécute contre une base de données (sans le DBCATALOG.dbo), donc pas de problème là-bas. Lorsque j'essaie d'exécuter l'instruction telle quelle, j'obtiens une syntaxe incorrecte près de '<'. J'ai également essayé d'utiliser un outil pour créer une union pour toutes nos bases de données (voir la deuxième déclaration). Cela entraîne une erreur de nom d'objet non valide (nom d'objet non valide 'TF7-User-Demo-ScheduledRestore-03.dbo.LinkedDocumentFolderTable', nom d'objet non valide 'TF7-TestDatabase-ScheduledRestore.dbo.LinkedDocumentFolderTable', etc.). Il semble être lié au. [Dbo], mais je ne sais pas ce qui cause le problème. Je ne trouve rien dans le livre indiquant qu'un compte ne peut pas être effectué sur plusieurs bases de données.

SELECT CNT=COUNT(*) 
FROM <DBCATALOG>.[dbo].[LinkedDocumentFolderTable] 
WHERE IsUnmanagedFolder = 1 


SELECT 'TF7-User-Demo-ScheduledRestore-03' AS DBCatalog, * FROM(SELECT COUNT(*) 
FROM [TF7-User-Demo-ScheduledRestore-03].[dbo].[LinkedDocumentFolderTable] 
WHERE IsUnmanagedFolder = 1)rsOne 

UNION ALL 

SELECT 'TF7-TestDatabase-ScheduledRestore' AS DBCatalog, * FROM(SELECT COUNT(*) 
FROM [TF7-TestDatabase-ScheduledRestore].[dbo].[LinkedDocumentFolderTable] 
WHERE IsUnmanagedFolder = 1)rsOne 

Répondre

1

Votre syntaxe semble être bizarre. Essayez ensuite:

SELECT 'TF7-User-Demo-ScheduledRestore-03' AS DBCatalog, COUNT(*) 
FROM [TF7-User-Demo-ScheduledRestore-03].[dbo].[LinkedDocumentFolderTable] 
WHERE IsUnmanagedFolder = 1 

Avez-vous également toutes les autorisations nécessaires? (Je ferais mieux de ne pas demander, avez-vous des bases de données comme TF7-User-Demo-ScheduledRestore-03 sur le même serveur présent?)

+0

Toujours une erreur ... Nom d'objet invalide 'TF7-User-Demo-ScheduledRestore-03.dbo.LinkedDocumentFolderTable'. –

+0

Oui, toutes les bases de données sont conservées sur notre serveur du centre-ville. J'utilise Query Analyzer pour exécuter la requête. –

+0

Avez-vous résolu votre problème? Sinon, je ne peux pas comprendre votre acceptation :) Et si vous sautez .dbo. partie, en utilisant seulement DB et nom de la table [TF7-User-Demo-ScheduledRestore-03] .. [LinkedDocumentFolderTable]? Est-ce que sp_databases affiche cette base de données? Peut-être que ce n'est pas chargé ou quelque chose? – Arvo

0

Je ne suis pas tout à fait sûr de ce que vous essayez réellement de le faire, mais les angles (<>) et crochets ([]) entre parenthèses ne sont pas valables pour avoir dans les requêtes.

Quel moteur de base de données utilisez-vous?

+0

Je travaille dans SQL 2005 (je pense), SQL Query Analyzer Version SQL 8.00.760. J'essaye d'effectuer un compte à travers 100 bases de données en utilisant le . [Dbo] pour appeler chaque base de données. –

+0

C'est l'erreur que je reçois si j'élimine les <> et [] .... Nom d'objet invalide 'DBCATALOG.dbo.LinkedDocumentFolderTable'. –

0

L'identificateur cité pour SQL Server est les parenthèses que vous utilisez ailleurs ("[" et "]"), pas le "<" et ">", donc je suppose que c'est la raison pour laquelle vous obtenez la première erreur. Les bases de données sont-elles réellement nommées TF7-User-Demo-ScheduledRestore-03, etc.?

En outre, lors de la sélection d'une sous-requête, vous devez vous assurer que toutes les colonnes de la sous-requête sont aliasées si elles ne possèdent pas déjà un nom de colonne. Par exemple:

(SELECT COUNT(*) AS my_count) 
+0

Certains d'entre eux sont. Notre nomenclature est nom_utilisateur-emplacement. Dans le cas ci-dessus, il s'agit d'une base de données de démonstration pour notre société. –

Questions connexes