Utilisez un REDIS sous Windows :
Copier les fichiers dans un dossier de votre ordinateur.
Il s'agit de la version 2.6 de Redis pour un OS 32 bits
29 septembre 2013
SQL : Exécuter une requête sur toutes les bases d'un serveur
Exécuter une même requête SQL Server sur quelques (ou toutes les) tables d'un serveur ?
La procédure sp_msforeachdb (non documentée) peut aider :
EXEC sp_msforeachdb '
USE [?];
IF (''?'' LIKE ''m%'' AND EXISTS (SELECT 1 FROM sys.tables WHERE name = ''object''))
BEGIN
Print ''?'' + '' as not object''
END;
';
L'argument chaîne se décompose en :
EXEC sp_msforeachdb '
USE [?];
IF (''?'' LIKE ''mes_bases_%'' AND EXISTS (SELECT 1 FROM sys.tables t INNER JOIN sys.columns c ON t.object_id = c.object_id WHERE t.name = ''table1'' AND c.name = ''colonne_qui_est_pas_dans_toutes_les_bases'') )
BEGIN
Declare @msg varchar(max)
SET @msg = ''SELECT ''''?'''' as base, count(*) as nombre FROM table1 WHERE colonne_qui_est_pas_dans_toutes_les_bases is not null'';
EXEC (@msg);
END;
';
Comptez bien le nombre d'apostrophes !!!!
La procédure sp_msforeachdb (non documentée) peut aider :
EXEC sp_msforeachdb '
USE [?];
IF (''?'' LIKE ''m%'' AND EXISTS (SELECT 1 FROM sys.tables WHERE name = ''object''))
BEGIN
Print ''?'' + '' as not object''
END;
';
L'argument chaîne se décompose en :
- USE ==> pour basculer sur la base. ? est le nom de la base en cours. Notez les [] qui encadrent le ?
- IF ==>
- Entre le BEGIN et le END ==> la requête à exécuter.
CREATE TABLE #tmp (base VARCHAR(50) NOT NULL, nombre INT NOT NULL);
EXEC sp_msforeachdb '
Use [?];
IF (''?'' LIKE ''m%'' AND EXISTS (SELECT 1 FROM sys.tables WHERE name = ''object''))
BEGIN
INSERT INTO #tmp (base, nombre) SELECT ''?'' AS base, COUNT(*) FROM sys.tables
END;
';
SELECT * FROM #tmp;
Attention selon les colonnes présente ou pas dans la base certaine requête pourraient planter.
Pour contourner ce problème voici un exemple :
USE [?];
IF (''?'' LIKE ''mes_bases_%'' AND EXISTS (SELECT 1 FROM sys.tables t INNER JOIN sys.columns c ON t.object_id = c.object_id WHERE t.name = ''table1'' AND c.name = ''colonne_qui_est_pas_dans_toutes_les_bases'') )
BEGIN
Declare @msg varchar(max)
SET @msg = ''SELECT ''''?'''' as base, count(*) as nombre FROM table1 WHERE colonne_qui_est_pas_dans_toutes_les_bases is not null'';
EXEC (@msg);
END;
';
Comptez bien le nombre d'apostrophes !!!!
Enjoy;
Inscription à :
Articles (Atom)