by Maxi Accotto
8. julio 2011 02:09
Cuando necesitamos por ejemplo hacer una migración , ya sea a un nuevo equipamiento y/o a una nueva versión, una de las técnicas para pasar las bases de datos de un lugar al otro es el método Attach / Detach.
Ahora bien, si tenemos pocas bases de datos no hay ningún problema porque hacer el Attach no llevaría mucho tiempo.
Ahora que sucede si tenemos muchas bases de datos? es una tarea bastante engorrosa hacer una por una, yo utilizo para esto un script que generar el código de attach con las ubicaciones de los Data y Log de cada base de datos.
Este script es el que utilizo al hacer este tipo de trabajos y la verdad que no solo me hace ahorrar mucho tiempo sino también cometer menos errores cuando hay una cantidad de bases de datos grande en nuestra instancia.
Aquí les dejo el código y el adjunto del script, espero les sea útil como me fue a mi 
DECLARE @dbid int
DECLARE @name varchar(50)
DECLARE @file varchar(150)
DECLARE @IDFILE INT
DECLARE @CMD VARCHAR(4000)
SET @CMD = ''
SET @IDFILE = 1
DECLARE cAttach CURSOR
READ_ONLY
FOR SELECT dbid, name FROM
sysdatabases
where name not in
('master','tempdb','model','msdb','northwind', 'pubs','distribution' )
OPEN cAttach
FETCH NEXT FROM cAttach INTO @dbid, @name
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
-- buscamos los archivos
DECLARE archivos CURSOR
READ_ONLY FOR
select [filename] FROM sysaltfiles
where dbid = @dbid
order by fileid
OPEN archivos
FETCH NEXT FROM archivos INTO @file
WHILE (@@fetch_status <> -1)
begin
BEGIN
SET @CMD = @CMD + ',@FILENAME' +CONVERT(varchar(10),@IDFILE) + '='
+ '''' + rtrim(@file) + '''' + CHAR(13)
set @IDFILE = @IDFILE + 1
end
FETCH NEXT FROM archivos INTO @file
end
CLOSE archivos
DEALLOCATE archivos
print '';
print 'EXEC sp_attach_db @dbname = ''' + (@name) + '''' ;
print @cmd + ';'
SET @CMD = ''
SET @IDFILE = 1
END
FETCH NEXT FROM cAttach INTO @dbid, @name
END
CLOSE cAttach
DEALLOCATE cAttach
GO