Je suis en train de créer une procédure stockée qui va réindexer une base
placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un
cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,'
',100)
Le problème c'est que la procédure s'exécute par défaut sur master. Il ne
trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le
nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en
argument ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Romelard Fabrice [MVP]
Bonsoir,
Tu peux t'inspirer de ce script-ci qui fait une mise à jour des statistiques de chaque base du serveur SQL. - http://www.sqlfr.com/code.aspx?ID)623
-- Cordialement. Romelard Fabrice [MVP]
"laetitia" a écrit dans le message de news:
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,' ',100) Le problème c'est que la procédure s'exécute par défaut sur master. Il ne trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en argument ?
Merci par avance Laetitia
Bonsoir,
Tu peux t'inspirer de ce script-ci qui fait une mise à jour des statistiques
de chaque base du serveur SQL.
- http://www.sqlfr.com/code.aspx?ID)623
--
Cordialement.
Romelard Fabrice [MVP]
"laetitia" <laetitia@discussions.microsoft.com> a écrit dans le message de
news: 278CDF2C-A47C-4E4D-B119-6B05AEF5CDDF@microsoft.com...
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base
placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un
cursor. pour chaque table je lance la commande : DBCC
DBREINDEX(@TableName,'
',100)
Le problème c'est que la procédure s'exécute par défaut sur master. Il ne
trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement
le
nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en
argument ?
Tu peux t'inspirer de ce script-ci qui fait une mise à jour des statistiques de chaque base du serveur SQL. - http://www.sqlfr.com/code.aspx?ID)623
-- Cordialement. Romelard Fabrice [MVP]
"laetitia" a écrit dans le message de news:
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,' ',100) Le problème c'est que la procédure s'exécute par défaut sur master. Il ne trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en argument ?
Merci par avance Laetitia
Romelard Fabrice [MVP]
Bonsoir,
Cette demande m'a intrigué, j'ai donc cherché comment faire ceci, voila une possibilité : -------
SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_') PRINT '---------------------------------------------------------------------' PRINT ' DATE DE LA MISE A JOUR DES STATISTIQUES LANCEE : '+ @DateJour PRINT '---------------------------------------------------------------------'
DECLARE TESTCURSEUR CURSOR FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs')
OPEN TESTCURSEUR FETCH NEXT FROM TESTCURSEUR INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN PRINT '' PRINT '---------------------------------------------------------------------' PRINT ' RECONSTRUCTION DES INDEXES DE LA BASE : '+ @name PRINT '---------------------------------------------------------------------'
SET @LaRequette = 'SELECT U.name +''.''+ O.name AS name FROM '+ @name +'.dbo.sysobjects O INNER JOIN '+ @name +'.dbo.sysusers U ON O.uid = U.uid WHERE O.xtype= ''U'';'
PRINT 'Changement de base : '+ @LaRequette PRINT '---------------------------------------------------------------------'
EXEC('DECLARE TESTCURSEURTABLE CURSOR FOR '+ @LaRequette) OPEN TESTCURSEURTABLE FETCH NEXT FROM TESTCURSEURTABLE INTO @nameTable
WHILE @@FETCH_STATUS = 0 BEGIN SET @LaRequette = 'DBCC DBREINDEX ('''+ @name +'.'+ @nameTable +''', '''', 100)' PRINT 'Requette : '+ @LaRequette EXECUTE (@LaRequette) PRINT '---------------------------------------------------------------------' FETCH NEXT FROM TESTCURSEURTABLE INTO @nameTable END
CLOSE TESTCURSEURTABLE DEALLOCATE TESTCURSEURTABLE
FETCH NEXT FROM TESTCURSEUR INTO @name END
PRINT '---------------------------------------------------------------------' PRINT ' FIN DE LA RECONSTRUCTION' PRINT '---------------------------------------------------------------------'
CLOSE TESTCURSEUR DEALLOCATE TESTCURSEUR GO
------- Cordialement.
Romelard Fabrice [MVP]
"laetitia" a écrit dans le message de news:
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,' ',100) Le problème c'est que la procédure s'exécute par défaut sur master. Il ne trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en argument ?
Merci par avance Laetitia
Bonsoir,
Cette demande m'a intrigué, j'ai donc cherché comment faire ceci, voila une
possibilité :
-------
SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_')
PRINT
'---------------------------------------------------------------------'
PRINT ' DATE DE LA MISE A JOUR DES STATISTIQUES LANCEE : '+ @DateJour
PRINT
'---------------------------------------------------------------------'
DECLARE TESTCURSEUR CURSOR
FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases
WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs')
OPEN TESTCURSEUR
FETCH NEXT FROM TESTCURSEUR
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ''
PRINT
'---------------------------------------------------------------------'
PRINT ' RECONSTRUCTION DES INDEXES DE LA BASE : '+ @name
PRINT
'---------------------------------------------------------------------'
SET @LaRequette = 'SELECT U.name +''.''+ O.name AS name
FROM '+ @name +'.dbo.sysobjects O INNER JOIN '+ @name +'.dbo.sysusers U
ON O.uid = U.uid WHERE O.xtype= ''U'';'
PRINT 'Changement de base : '+ @LaRequette
PRINT
'---------------------------------------------------------------------'
EXEC('DECLARE TESTCURSEURTABLE CURSOR FOR '+ @LaRequette)
OPEN TESTCURSEURTABLE
FETCH NEXT FROM TESTCURSEURTABLE
INTO @nameTable
WHILE @@FETCH_STATUS = 0
BEGIN
SET @LaRequette = 'DBCC DBREINDEX ('''+ @name +'.'+ @nameTable +''', '''',
100)'
PRINT 'Requette : '+ @LaRequette
EXECUTE (@LaRequette)
PRINT
'---------------------------------------------------------------------'
FETCH NEXT FROM TESTCURSEURTABLE
INTO @nameTable
END
CLOSE TESTCURSEURTABLE
DEALLOCATE TESTCURSEURTABLE
FETCH NEXT FROM TESTCURSEUR
INTO @name
END
PRINT
'---------------------------------------------------------------------'
PRINT ' FIN DE LA RECONSTRUCTION'
PRINT
'---------------------------------------------------------------------'
CLOSE TESTCURSEUR
DEALLOCATE TESTCURSEUR
GO
-------
Cordialement.
Romelard Fabrice [MVP]
"laetitia" <laetitia@discussions.microsoft.com> a écrit dans le message de
news: 278CDF2C-A47C-4E4D-B119-6B05AEF5CDDF@microsoft.com...
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base
placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un
cursor. pour chaque table je lance la commande : DBCC
DBREINDEX(@TableName,'
',100)
Le problème c'est que la procédure s'exécute par défaut sur master. Il ne
trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement
le
nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en
argument ?
SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_') PRINT '---------------------------------------------------------------------' PRINT ' DATE DE LA MISE A JOUR DES STATISTIQUES LANCEE : '+ @DateJour PRINT '---------------------------------------------------------------------'
DECLARE TESTCURSEUR CURSOR FOR SELECT Master.dbo.sysdatabases.name FROM Master.dbo.sysdatabases WHERE Master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs')
OPEN TESTCURSEUR FETCH NEXT FROM TESTCURSEUR INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN PRINT '' PRINT '---------------------------------------------------------------------' PRINT ' RECONSTRUCTION DES INDEXES DE LA BASE : '+ @name PRINT '---------------------------------------------------------------------'
SET @LaRequette = 'SELECT U.name +''.''+ O.name AS name FROM '+ @name +'.dbo.sysobjects O INNER JOIN '+ @name +'.dbo.sysusers U ON O.uid = U.uid WHERE O.xtype= ''U'';'
PRINT 'Changement de base : '+ @LaRequette PRINT '---------------------------------------------------------------------'
EXEC('DECLARE TESTCURSEURTABLE CURSOR FOR '+ @LaRequette) OPEN TESTCURSEURTABLE FETCH NEXT FROM TESTCURSEURTABLE INTO @nameTable
WHILE @@FETCH_STATUS = 0 BEGIN SET @LaRequette = 'DBCC DBREINDEX ('''+ @name +'.'+ @nameTable +''', '''', 100)' PRINT 'Requette : '+ @LaRequette EXECUTE (@LaRequette) PRINT '---------------------------------------------------------------------' FETCH NEXT FROM TESTCURSEURTABLE INTO @nameTable END
CLOSE TESTCURSEURTABLE DEALLOCATE TESTCURSEURTABLE
FETCH NEXT FROM TESTCURSEUR INTO @name END
PRINT '---------------------------------------------------------------------' PRINT ' FIN DE LA RECONSTRUCTION' PRINT '---------------------------------------------------------------------'
CLOSE TESTCURSEUR DEALLOCATE TESTCURSEUR GO
------- Cordialement.
Romelard Fabrice [MVP]
"laetitia" a écrit dans le message de news:
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,' ',100) Le problème c'est que la procédure s'exécute par défaut sur master. Il ne trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en argument ?
Je suis en train de créer une procédure stockée qui va réindexer une base placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,' ',100) Le problème c'est que la procédure s'exécute par défaut sur master. Il ne trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en argument ?
Merci par avance Laetitia
Vous trouverez d'ailleurs cette source :
- http://www.sqlfr.com/code.aspx?ID5836
Fabrice
"laetitia" <laetitia@discussions.microsoft.com> a écrit dans le message de
news: 278CDF2C-A47C-4E4D-B119-6B05AEF5CDDF@microsoft.com...
Bonjour,
Je suis en train de créer une procédure stockée qui va réindexer une base
placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un
cursor. pour chaque table je lance la commande : DBCC
DBREINDEX(@TableName,'
',100)
Le problème c'est que la procédure s'exécute par défaut sur master. Il ne
trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement
le
nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en
argument ?
Je suis en train de créer une procédure stockée qui va réindexer une base placée en paramètre : exec sp_reindexBase 'maBase'
Dans un premier temps, je récupère la liste des tables de 'maBase' dans un cursor. pour chaque table je lance la commande : DBCC DBREINDEX(@TableName,' ',100) Le problème c'est que la procédure s'exécute par défaut sur master. Il ne trouve donc pas les tables et retourne une erreur.
Quand j'ajoute "USE maBase" au début de ma procédure ça marche. Seulement le nom de la base est une variable et Use @DatabaseName ne fonctionne pas.
Comment je peux faire pour forcer le DBCC DBREINDEX sur la base placée en argument ?