Procédure stockée et parametre "base donnée" - SQL/NoSQL - Programmation
MarshPosté le 11-03-2005 à 09:55:22
Bonjour a tous
J'ai trouvé un script sur le net qui permet de reindexer toutes les tables d'une bases donnée.
J'essaye de le transformer en proc stock avec en parametre le nom de la base que je veux toucher.
J'ai un probleme !
On ne peut utiliser un "Use database" dans une proc stock. On ne peut utiliser une variable @dbname avec l'instruction "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" du genre "SELECT TABLE_NAME FROM @dbname.INFORMATION_SCHEMA.TABLES"
Je ne peux faire un EXEC avec en parametre la commande sql car un EXEC.. ne passe pas dans une ouverture de cursor.
Que faire ? cela doit bien exister ! Comment se positionner sur une base dont le nom est passé en parametre dans une proc stock ?
Merci de votre aide !
Code :
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
ALTER PROCEDURE dbo.ColoReindex @dbname sysname AS
IF ((@dbname is null OR datalength(@dbname) = 0))
begin
raiserror (15004,-1,-1)
return (1)
end
if not exists (select * from master.dbo.sysdatabases where name = @dbname)
begin
raiserror(15010,-1,-1,@dbname)
return (1)
end
--count records in Travail.dbo.Index_Log where Complete=0
if (Select count(pkIndex_Log) as Ind_Count from Travail.dbo.Index_Log where Complete=0 and Run_Type='Indexing') = 0
Begin
-----START INSERT-----
DECLARE @Cur_Run int
SET @Cur_Run=(select isnull(max(Run_No),0) + 1 from Travail.dbo.Index_Log)
Le probleme est la
Code :
DECLARE @TableName sysname
DECLARE cur_reindex CURSOR FOR
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES -- Je voudrais passer mon nom de base ici
OPEN cur_reindex
FETCH NEXT FROM cur_reindex INTO @TableName
Fin du probleme
Code :
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @IndexName sysname
DECLARE cur_reindexA CURSOR FOR
SELECT i.name as index_name
FROM dbo.sysindexes i
WHERE id = object_id(@TableName) and i.indid > 0 and i.indid < 255
and (indexkey_property(object_id(@TableName), i.indid, 1, N'isdescending') is not null)
Marsh Posté le 11-03-2005 à 09:55:22
Bonjour a tous
J'ai trouvé un script sur le net qui permet de reindexer toutes les tables d'une bases donnée.
J'essaye de le transformer en proc stock avec en parametre le nom de la base que je veux toucher.
J'ai un probleme !
On ne peut utiliser un "Use database" dans une proc stock.
On ne peut utiliser une variable @dbname avec l'instruction "SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES" du genre "SELECT TABLE_NAME
FROM @dbname.INFORMATION_SCHEMA.TABLES"
Je ne peux faire un EXEC avec en parametre la commande sql car un EXEC.. ne passe pas dans une ouverture de cursor.
Que faire ? cela doit bien exister ! Comment se positionner sur une base dont le nom est passé en parametre dans une proc stock ?
Merci de votre aide !
Le probleme est la
Fin du probleme
Message édité par orlith le 11-03-2005 à 10:44:05