Je travaille avec beaucoup de bases de données identiques. J'utilise donc la procédure sp_MSforeachdb pour récupérer des informations dans une table.sp_MSforeachdb aide à la requête
Le problème que j'ai rencontré est qu'il y a d'autres bases de données sur la boîte qui n'ont pas la table, donc je jette des erreurs d'objet invalides.
Voici ce que j'ai pour le moment, je filtre LoginDatabase car il a la même table mais je ne le veux pas dans la requête.
Ma question est, comment puis-je restreindre juste aux bases de données avec la table dont je veux récupérer des informations.
SET NOCOUNT ON
CREATE TABLE #tmpData
(
DbName VARCHAR(30),
DbVersion FLOAT
)
exec sp_msforeachdb @command1='
USE ?;
INSERT INTO #tmpData
SELECT ''?'', (SELECT Setting
FROM ?.dbo.gl_SysParams
WHERE Keyword = ''DatabaseSchema'')
FROM sysobjects o
WHERE type=''U''
AND [name] = ''gl_SysParams''
AND ''?'' <> ''LoginDatabase'' ORDER BY [name]
'
SET NOCOUNT OFF
SELECT DbName, DbVersion FROM #tmpData ORDER BY DbName
DROP TABLE #tmpData
Alors enveloppez sp_MSforeachtable dans la commande @ de sp_MSforeachdb? –
@Sres - oui. Les citations peuvent être un peu déroutantes, et bien sûr, vous devez spécifier le @replacechar pour l'un des processus stockés –
Je rencontre un problème avec le nom de la colonne Ambiguous 'name' maintenant, j'ai alias les sysobjects de l'original ci-dessus, quelle est la table @whereand looking? –