Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2013, 14:01
denny20041
 
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 2
Antigüedad: 12 años, 9 meses
Puntos: 0
Recorrer varias bases de datos de una instancia

Les cuento mi problema:
No tengo mucha experiencia con SQL y quiera saber si es posible ejecutar consulta a varias bases de datos en un solo script, les muestro mi script
Código SQL:
Ver original
  1. USE master
  2. GO
  3. IF OBJECT_ID ('CREA_ARRAY_TMP', 'P') IS NOT NULL
  4.  DROP PROCEDURE CREA_ARRAY_TMP
  5. GO
  6. IF EXISTS (
  7.  SELECT *
  8.  FROM SYS.TABLES P
  9.  WHERE P.NAME = 'PAPELERA'
  10. )
  11. DROP TABLE Papelera
  12. GO
  13. CREATE PROCEDURE CREA_ARRAY_TMP
  14.  AS
  15.  SELECT NAME INTO PAPELERA
  16.  FROM sys.DATABASES
  17.  WHERE NAME LIKE 'DATA%'
  18. GO
  19. CREA_ARRAY_TMP
  20.  
  21. IF OBJECT_ID ('ACTUALIZA_BD', 'P') IS NOT NULL
  22.  DROP PROCEDURE ACTUALIZA_BD
  23. GO
  24. CREATE PROCEDURE ACTUALIZA_BD
  25.   AS
  26.   DECLARE @VARIABLE NVARCHAR(256),
  27.   @DATA CHAR(7),
  28.   @ROW CHAR(6)
  29.  
  30.   SET @ROW = (SELECT COUNT(*) FROM PAPELERA)
  31.   WHILE @ROW > 0
  32.     BEGIN
  33.      SET @DATA =  (SELECT TOP 1 NAME FROM PAPELERA)
  34.      SET @VARIABLE = 'USE ' + @DATA
  35.      EXECUTE(@VARIABLE)
  36.      --Aui ponemos el codigo a actualizar en todas las bases de datos
  37.         --ALTER TABLE COA
  38.         --ALTER column DIRECCION varchar(150);
  39.      --Hasta aqui
  40.      SET @VARIABLE = 'USE master'
  41.      EXECUTE(@VARIABLE)
  42.      SET @ROW=@ROW-1
  43.      DELETE FROM PAPELERA WHERE NAME = @DATA
  44.      
  45.   END
  46. GO
  47. ACTUALIZA_BD
  48. GO
  49. DROP PROCEDURE CREA_ARRAY_TMP
  50. DROP PROCEDURE ACTUALIZA_BD

Básicamente lo que hace es:
Extrae todas las bases de datos que empiezan con DATA y lo almacena en una tabla papelera
luego con un bucle quiero ir cambiando de base de datos y ejecutando la consulta para todas las bases de datos, este mismo código lo utilizo para eliminar tablas temporales y me funciona perfectamente pero aquí no.

Muchas gracias, espero que alguien me pueda ayudar Saludos.

Última edición por gnzsoloyo; 13/06/2013 a las 20:04