Sunday, March 29, 2009

How to attach all database from directory on sql server ?

Dear All
kindly follow given procedure

step 1


CREATE TABLE [dbo].dbname( [id] [int] IDENTITY(1,1) NOT NULL, [dbname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [mdfname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [logname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [pathname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL) ON [PRIMARY]
GOSET ANSI_PADDING OFF
CREATE TABLE [dbo].logname( [id] [int] IDENTITY(1,1) NOT NULL, [dbname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [mdfname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [logname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [pathname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL) ON [PRIMARY]
CREATE TABLE [dbo].mdfname( [id] [int] IDENTITY(1,1) NOT NULL, [dbname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [mdfname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [logname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, [pathname] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL) ON [PRIMARY]

step 2

USE Master; GO SET NOCOUNT ON
DECLARE @dbName sysname DECLARE @backupPath NVARCHAR(4000) DECLARE @cmd NVARCHAR(4000)
DECLARE @lastFullBackup NVARCHAR(4000) DECLARE @lastDiffBackup NVARCHAR(4000) DECLARE @backupFile NVARCHAR(4000)DECLARE @logbackupFile NVARCHAR(4000)
DECLARE @fileList TABLE (backupFile NVARCHAR(255)) SET @backupPath = 'D:\data\pra\' SET @cmd = 'DIR /b ' + @backupPath
INSERT INTO @fileList(backupFile) EXEC master.sys.xp_cmdshell @cmd
--select backupFile from @fileList
insert into mdfname (mdfname)( SELECT backupFile as mdfnameFROM @fileList WHERE backupFile LIKE '%.mdf')
insert into logname (logname) (select left(backupFile,charindex('.mdf',backupFile)-1)+ + '_log.ldf' as lognameFROM @fileList WHERE backupFile LIKE '%.mdf')
insert into dbname (dbname) (select left(backupFile,charindex('.mdf',backupFile)-1) as dbnameFROM @fileList WHERE backupFile LIKE '%.mdf')




step 3


SET NOCOUNT ON
DECLARE @strcycle varchar(100)declare @id intdeclare @loop intDECLARE @MyCounter intSET @MyCounter = 1set @loop = (select count(*) from dbname)--set @loop= @loop+1--set @cycle= (select cycle from cycle where autoid =1)

WHILE (@MyCounter < @loop+1)BEGINset @id= (select id from dbname where id =@MyCounter)
DECLARE @dbname1 varchar(200)
DECLARE @filename11 varchar(200)
DECLARE @filename22 varchar(200)
exec ('Declare dbnamedb Cursor For select dbname from dbname where id = ' + @id ) OPEN dbnamedbFETCH NEXT FROM dbnamedb into @dbname1 WHILE (@@FETCH_STATUS = 0)begin
FETCH NEXT FROM dbnamedb into @dbname1 endclose dbnamedbdeallocate dbnamedb
exec ('Declare mdname Cursor For select mdfname from mdfname where id = ' + @id ) OPEN mdnameFETCH NEXT FROM mdname into @filename11 WHILE (@@FETCH_STATUS = 0)begin
FETCH NEXT FROM mdname into @filename11 endclose mdnamedeallocate mdname

exec ('Declare lgname Cursor For select logname from logname where id = ' + @id ) OPEN lgnameFETCH NEXT FROM lgname into @filename22 WHILE (@@FETCH_STATUS = 0)begin
FETCH NEXT FROM lgname into @filename22 endclose lgnamedeallocate lgname
declare @backupPath varchar(1000)SET @backupPath = 'D:\data\pra\'
set @filename11 =@backupPath+@filename11
set @filename22 =@backupPath +@filename22
EXEC sp_attach_db @dbname = @dbname1, @filename1 = @filename11, @filename2 = @filename22
print @dbname1print @filename11print @filename22
SET @MyCounter = @MyCounter + 1
ENDSET NOCOUNT OFF


if u r unable to do this can mail me
jayant.dass@gmail.com
09313406257

No comments:

Post a Comment