Wednesday, March 21, 2018

Database Restore – FULL and DIFF


Database Restore – FULL and DIFF

[A] – Database  restore FULL and DIFF

Create Procedure [dbo].[RestoreDB_Full_Diff]
 (
   @DBName        Varchar(50),
   @Overwrite_Existing Bit = 1,
   @Folder_Path Varchar(255),
   @Full_Bkp_Filename Varchar(255),
   @Diff_Bkp_Filenames Varchar(8000)='',
   @MDF_File_Path Varchar(500),
   @LDF_File_Path Varchar(500),
   @Backup_Expiry_Date Date,
   @Requester_EmailId [varchar](500),
   @EmailId_CC [varchar](500),
   @Debug bit
 )
AS
BEGIN
SET NOCOUNT ON

 Declare  @Restore Varchar(1000),@Restore_Varify Varchar(1000)
       Declare @id int,@FileName Varchar(255),@Max_Id int
       Select @Max_Id  = Max(id)from dbo.[Split](@Diff_Bkp_Filenames ,',') Where Value != ''

--Correct the directory path
      IF RIGHT(@Folder_Path,1)= '\'
            Select @Folder_Path = SUBSTRING(@Folder_Path,1,LEN(@Folder_Path)-1)

--Correct the directory path for mdf
      IF RIGHT(@MDF_File_Path,1)= '\'
            Select @MDF_File_Path = SUBSTRING(@MDF_File_Path,1,LEN(@MDF_File_Path)-1)

--Correct the directory path for ldf
      IF RIGHT(@LDF_File_Path,1)= '\'
            Select @LDF_File_Path = SUBSTRING(@LDF_File_Path,1,LEN(@LDF_File_Path)-1)

      SET @MDF_File_Path = @MDF_File_Path+'\'+@DBName+'.mdf'
      SET @LDF_File_Path = @LDF_File_Path+'\'+@DBName+'_Log.ldf'

DECLARE @Table TABLE (LogicalName varchar(128),[PhysicalName] varchar(128), [Type] varchar, [FileGroupName] varchar(128), [Size] varchar(128),
            [MaxSize] varchar(128), [FileId]varchar(128), [CreateLSN]varchar(128), [DropLSN]varchar(128), [UniqueId]varchar(128), [ReadOnlyLSN]varchar(128), [ReadWriteLSN]varchar(128),
            [BackupSizeInBytes]varchar(128), [SourceBlockSize]varchar(128), [FileGroupId]varchar(128), [LogGroupGUID]varchar(128), [DifferentialBaseLSN]varchar(128), [DifferentialBaseGUID]varchar(128), [IsReadOnly]varchar(128), [IsPresent]varchar(128), [TDEThumbprint]varchar(128)
)
DECLARE @Path varchar(1000)=@Folder_Path+'\'+@Full_Bkp_Filename
DECLARE @LogicalNameData varchar(128),@LogicalNameLog varchar(128)
INSERT INTO @table
EXEC('
RESTORE FILELISTONLY
   FROM DISK=''' +@Path+ '''
   ')

   SET @LogicalNameData=(SELECT LogicalName FROM @Table WHERE Type='D')
   SET @LogicalNameLog=(SELECT LogicalName FROM @Table WHERE Type='L')

--Code to kill existing active process and dro the database;
IF(@Overwrite_Existing = 1)
      Begin
            If(@Debug = 0)
            Begin
                  --Check existance of database
                  IF Exists(Select * from sys.databases Where name = @DBName)
                        Exec Kill_Process @DBName
            End
      End

 If(Len(@Full_Bkp_Filename)=0 And Len(@Diff_Bkp_Filenames)=0)
 Begin
      Print 'Please provide the backup details.'
 End
 Else If(Len(@Full_Bkp_Filename)=0 And Len(@Diff_Bkp_Filenames)!=0)
 Begin
      Print 'Please provide the FULL backup details.'
 End
 Else If(Len(@Full_Bkp_Filename)!=0 And Len(@Diff_Bkp_Filenames)=0)
 Begin
      Print '---------  FULL Backup ---------  '
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       +' WITH  FILE = 1,
       MOVE N'+Quotename(@LogicalNameData,'''')+' TO N'+Quotename(@MDF_File_Path,'''')+', 
       MOVE N'+Quotename(@LogicalNameLog,'''')+' TO N'+Quotename(@LDF_File_Path,'''')+',  '
       IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + 'RECOVERY,  NOUNLOAD,  STATS = 10 '
       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
      End
       Else
            Begin
                        Exec (@Restore_Varify)
                       
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],[Backup_Expiry_Date],[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@Full_Bkp_Filename,GETDATE(),@Folder_Path,'Full Backup Only',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                         Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End
 End
 Else If(Len(@Full_Bkp_Filename)!=0 And Len(@Diff_Bkp_Filenames)!=0)
 Begin


      Print '---------  FULL and DIFF Backup ---------  '
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       +' WITH  FILE = 1,
       MOVE N'+Quotename(@LogicalNameData,'''')+' TO N'+Quotename(@MDF_File_Path,'''')+', 
       MOVE N'+Quotename(@LogicalNameLog,'''')+' TO N'+Quotename(@LDF_File_Path,'''')+','
      -- If database already exists
             IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + 'NORECOVERY,  NOUNLOAD,  STATS = 10 '
       
       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
      End
       Else
             Begin
                  Exec (@Restore_Varify)
                 
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],Backup_Expiry_Date,[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@Full_Bkp_Filename,GETDATE(),@Folder_Path,'Restore - Full backup with NORECOVERY',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                  Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End

             
-- DIFF Backup retoration
       Declare CRSR_DIFF_BKP Cursor for
     Select ROW_Number()over(Order By Value Asc ) As id,Value from dbo.[Split](@Diff_Bkp_Filenames ,',')
            Where Value != ''
            Order By Value Asc
OPEN CRSR_DIFF_BKP
Fetch next from CRSR_DIFF_BKP INTO @id,@FileName
      while @@Fetch_Status=0
      BEGIN

If (@Id = @Max_Id)
Begin
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       +' WITH  FILE = 1,  '
       
            -- If database already exists
             IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + 'NOUNLOAD ,  STATS = 10,  RECOVERY '
       
       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
       End
       Else
             Begin
                  Exec (@Restore_Varify)
                 
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],Backup_Expiry_Date,[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@FileName,GETDATE(),@Folder_Path,'Restore - Differetial backup with RECOVERY',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                         Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End

End
Else
Begin
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       +' WITH  FILE = 1, '
                  -- If database already exists
             IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + ' NOUNLOAD ,  STATS = 10,  NORECOVERY '
       
       
       

       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
       End
       Else
             Begin
                  Exec (@Restore_Varify)
                 
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],Backup_Expiry_Date,[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@FileName,GETDATE(),@Folder_Path,'Restore - Differetial backup with NORECOVERY',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                         Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End



End
     
     
     
      Fetch next from CRSR_DIFF_BKP INTO @id,@FileName
      END
CLOSE CRSR_DIFF_BKP
DEALLOCATE CRSR_DIFF_BKP

       
 End

End

[B] – Database  restore FULL and DIFF With Transfer Logins

Create Procedure [RestoreDB_Full_Diff_With_Transfer_login]
 (
   @DBName        Varchar(50),
   @Overwrite_Existing Bit = 1,
   @Folder_Path Varchar(255),
   @Full_Bkp_Filename Varchar(255),
   @Diff_Bkp_Filenames Varchar(8000)='',
   @MDF_File_Path Varchar(500),
   @LDF_File_Path Varchar(500),
   @Backup_Expiry_Date Date,
   @Requester_EmailId [varchar](500),
   @EmailId_CC [varchar](500),
   @Debug bit
 )
AS
BEGIN
SET NOCOUNT ON

 Declare  @Restore Varchar(1000),@Restore_Varify Varchar(1000)
       Declare @id int,@FileName Varchar(255),@Max_Id int
       Select @Max_Id  = Max(id)from dbo.[Split](@Diff_Bkp_Filenames ,',') Where Value != ''

--Correct the directory path
      IF RIGHT(@Folder_Path,1)= '\'
            Select @Folder_Path = SUBSTRING(@Folder_Path,1,LEN(@Folder_Path)-1)

--Correct the directory path for mdf
      IF RIGHT(@MDF_File_Path,1)= '\'
            Select @MDF_File_Path = SUBSTRING(@MDF_File_Path,1,LEN(@MDF_File_Path)-1)

--Correct the directory path for ldf
      IF RIGHT(@LDF_File_Path,1)= '\'
            Select @LDF_File_Path = SUBSTRING(@LDF_File_Path,1,LEN(@LDF_File_Path)-1)

      SET @MDF_File_Path = @MDF_File_Path+'\'+@DBName+'.mdf'
      SET @LDF_File_Path = @LDF_File_Path+'\'+@DBName+'_Log.ldf'

DECLARE @Table TABLE (LogicalName varchar(128),[PhysicalName] varchar(128), [Type] varchar, [FileGroupName] varchar(128), [Size] varchar(128),
            [MaxSize] varchar(128), [FileId]varchar(128), [CreateLSN]varchar(128), [DropLSN]varchar(128), [UniqueId]varchar(128), [ReadOnlyLSN]varchar(128), [ReadWriteLSN]varchar(128),
            [BackupSizeInBytes]varchar(128), [SourceBlockSize]varchar(128), [FileGroupId]varchar(128), [LogGroupGUID]varchar(128), [DifferentialBaseLSN]varchar(128), [DifferentialBaseGUID]varchar(128), [IsReadOnly]varchar(128), [IsPresent]varchar(128), [TDEThumbprint]varchar(128)
)
DECLARE @Path varchar(1000)=@Folder_Path+'\'+@Full_Bkp_Filename
DECLARE @LogicalNameData varchar(128),@LogicalNameLog varchar(128)
INSERT INTO @table
EXEC('
RESTORE FILELISTONLY
   FROM DISK=''' +@Path+ '''
   ')

   SET @LogicalNameData=(SELECT LogicalName FROM @Table WHERE Type='D')
   SET @LogicalNameLog=(SELECT LogicalName FROM @Table WHERE Type='L')

--Code to kill existing active process and dro the database;
IF(@Overwrite_Existing = 1)
      Begin
            If(@Debug = 0)
            Begin
                  --Check existance of database
                  IF Exists(Select * from sys.databases Where name = @DBName)
                        Exec Kill_Process @DBName
            End
      End
IF(@Overwrite_Existing = 1)
begin
DECLARE @sqltext varchar(max)
CREATE table #Transfer_login(ROW_ID INT IDENTITY(1,1),User_Name nvarchar(max),Role nvarchar(max),Grant_Access nvarchar(max),Add_Role nvarchar(max))
set @sqltext = 'use ' +@DBName+ ' insert into #Transfer_login
SELECT DBUser.name ,DBRole.name ,''EXEC sp_grantdbaccess ''''''+DBUser.name+'''''',''''''+DBUser.name+'''''''' 
,''exec sp_addrolemember ''''''+ DBRole.name +'''''',''''''+ DBUser.name +''''''''
FROM sys.database_principals DBUser
INNER JOIN sys.database_role_members DBM ON DBM.member_principal_id = DBUser.principal_id
INNER JOIN sys.database_principals DBRole ON DBRole.principal_id = DBM.role_principal_id
where DBUser.name not in (''dbo'')'
--print (@sqltext)
exec(@sqltext)
end
 If(Len(@Full_Bkp_Filename)=0 And Len(@Diff_Bkp_Filenames)=0)
 Begin
      Print 'Please provide the backup details.'
 End
 Else If(Len(@Full_Bkp_Filename)=0 And Len(@Diff_Bkp_Filenames)!=0)
 Begin
      Print 'Please provide the FULL backup details.'
 End
 Else If(Len(@Full_Bkp_Filename)!=0 And Len(@Diff_Bkp_Filenames)=0)
 Begin
      Print '---------  FULL Backup ---------  '
--   RESTORE DATABASE [Test_Db3]
--FROM  DISK = N'D:\SQL_Data\Backup\Test_DB_FULL_Backup_20160330123544.BAK'
--WITH  FILE = 1, 
--MOVE N'Test_DB' TO N'D:\SQL_Data\Test_Db3.mdf', 
--MOVE N'Test_DB_log' TO N'D:\SQL_Data\Test_Db3_1.ldf', 
--NORECOVERY,  NOUNLOAD,  STATS = 10
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       +' WITH  FILE = 1,
       MOVE N'+Quotename(@LogicalNameData,'''')+' TO N'+Quotename(@MDF_File_Path,'''')+', 
       MOVE N'+Quotename(@LogicalNameLog,'''')+' TO N'+Quotename(@LDF_File_Path,'''')+',  '
       IF(@Overwrite_Existing = 1)
       
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + 'RECOVERY,  NOUNLOAD,  STATS = 10 '
       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
      End
       Else
            Begin
                        Exec (@Restore_Varify)
                       
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],[Backup_Expiry_Date],[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@Full_Bkp_Filename,GETDATE(),@Folder_Path,'Full Backup Only',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                         Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End
 End
 Else If(Len(@Full_Bkp_Filename)!=0 And Len(@Diff_Bkp_Filenames)!=0)
 Begin


      Print '---------  FULL and DIFF Backup ---------  '
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@Full_Bkp_Filename+char(39)
       +' WITH  FILE = 1,
       MOVE N'+Quotename(@LogicalNameData,'''')+' TO N'+Quotename(@MDF_File_Path,'''')+', 
       MOVE N'+Quotename(@LogicalNameLog,'''')+' TO N'+Quotename(@LDF_File_Path,'''')+','
      -- If database already exists
             IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + 'NORECOVERY,  NOUNLOAD,  STATS = 10 '
       
       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
      End
       Else
             Begin
                  Exec (@Restore_Varify)
                 
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],Backup_Expiry_Date,[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@Full_Bkp_Filename,GETDATE(),@Folder_Path,'Restore - Full backup with NORECOVERY',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                  Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End

             
-- DIFF Backup retoration
       Declare CRSR_DIFF_BKP Cursor for
     Select ROW_Number()over(Order By Value Asc ) As id,Value from dbo.[Split](@Diff_Bkp_Filenames ,',')
            Where Value != ''
            Order By Value Asc
OPEN CRSR_DIFF_BKP
Fetch next from CRSR_DIFF_BKP INTO @id,@FileName
      while @@Fetch_Status=0
      BEGIN

If (@Id = @Max_Id)
Begin
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       +' WITH  FILE = 1,  '
       
            -- If database already exists
             IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + 'NOUNLOAD ,  STATS = 10,  RECOVERY '
       
       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
       End
       Else
             Begin
                  Exec (@Restore_Varify)
                 
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],Backup_Expiry_Date,[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@FileName,GETDATE(),@Folder_Path,'Restore - Differetial backup with RECOVERY',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                         Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End

End
Else
Begin
       Set @Restore_Varify = 'RESTORE VERIFYONLY FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       Set @Restore = 'RESTORE DATABASE '+ @DBName + ' FROM  DISK = '+Char(39)+@Folder_Path+'\'+@FileName+char(39)
       +' WITH  FILE = 1, '
                  -- If database already exists
             IF(@Overwrite_Existing = 1)
       Set @Restore = @Restore  + 'Replace,'
       Set @Restore = @Restore  + ' NOUNLOAD ,  STATS = 10,  NORECOVERY '
       
       
       

       If (@Debug=1)
       Begin
            Print (@Restore_Varify)
            Print (@Restore)
       End
       Else
             Begin
                  Exec (@Restore_Varify)
                 
                  Insert Into Restore_History([DB_Name],[Backup_File_Name],[Start_Time],[Backup_Path],[Comments],Backup_Expiry_Date,[Requester_EmailId],[EmailId_CC])
                  Select @DBName,@FileName,GETDATE(),@Folder_Path,'Restore - Differetial backup with NORECOVERY',@Backup_Expiry_Date,@Requester_EmailId,@EmailId_CC
                 
                         Exec (@Restore)
                         
                  Update Restore_History Set [Finish_Time] = GETDATE()
                  Where [ROWID] = (Select MAX([ROWID]) From Restore_History Where [DB_Name] = @DBName )   
             End



End
     
     
     
      Fetch next from CRSR_DIFF_BKP INTO @id,@FileName
      END
CLOSE CRSR_DIFF_BKP
DEALLOCATE CRSR_DIFF_BKP

 End
 
-- --Notification Mail after completion

 IF(@Overwrite_Existing = 1)
BEGIN

DECLARE @count int
DECLARE @i int
declare @username nvarchar(max)
declare @role nvarchar(max)
declare @query1 nvarchar(max)
declare @query2 nvarchar(max)
declare @query3 nvarchar(max)
declare @query4 nvarchar(max)
declare @query5 nvarchar(max)
declare @query6 nvarchar(max)
declare @query7 nvarchar(max)
declare @query8 nvarchar(max)
declare @query9 nvarchar(max)
declare @access_query nvarchar(max)
declare @role_query nvarchar(max)
SET @i=1
select @count=COUNT(*) from #Transfer_login

while (@i<=@count)
BEGIN

SELECT @username = User_Name,
         @role = Role
         from #Transfer_login where ROW_ID=@i
        
         SET @access_query = 'use ' + @DBName + ' EXEC sp_grantdbaccess '+ QUOTENAME(@username,'''')+ ','+ QUOTENAME(@username,'''')
         SET @role_query = 'use ' + @DBName + ' exec sp_addrolemember ' + QUOTENAME(@role,'''')+ ','+ QUOTENAME(@username,'''')
         EXEC (@access_query)
         EXEC (@role_query)
        
         IF (@role like '%db_datawriter%' or @role like '%db_ddladmin%')
         begin
        
            SET @query1 = 'use ' + @DBName + ' GRANT CONNECT TO ' + QUOTENAME(@username,'')
            print (@query1)
            EXEC (@query1)
           --EXECUTE sp_executesql @query1
            SET @query2 = 'use ' + @DBName + ' GRANT CREATE  TABLE TO ' + QUOTENAME(@username,'')
            print (@query2)
          EXEC (@query2)
          --EXECUTE sp_executesql @query2
           
            SET @query3 = 'use ' + @DBName + ' GRANT VIEW  DEFINITION TO' + QUOTENAME(@username,'')
            print (@query3)
           EXEC (@query3)
          -- EXECUTE sp_executesql @query3
          
            SET @query4 = 'use ' + @DBName + ' GRANT CONTROL ON Schema :: [dbo] TO '+ QUOTENAME(@username,'')
            print (@query4)
           EXEC (@query4)
           --EXECUTE sp_executesql @query4
          
            SET @query5 = 'use ' + @DBName + ' GRANT ALTER ON Schema :: [dbo] TO '+ QUOTENAME(@username,'')
          print (@query5)
           EXEC (@query5)
           --EXECUTE sp_executesql @query5
          
            SET @query6 = 'use ' + @DBName + ' GRANT CREATE PROCEDURE TO '+ QUOTENAME(@username,'')
            print (@query6)
           EXEC (@query6)
           --EXECUTE sp_executesql @query6
          
            SET @query7 = 'use ' + @DBName + ' GRANT CREATE FUNCTION TO '+ QUOTENAME(@username,'')
            print (@query7)
           EXEC (@query7)
           --EXECUTE sp_executesql @query7
          
            SET @query8 = 'use ' + @DBName + ' GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO '+ QUOTENAME(@username,'')
            print (@query8)
           EXEC (@query8)
          
           --EXECUTE sp_executesql @query8
          
            SET @query9 = 'use ' + @DBName + ' GRANT EXECUTE TO '+ QUOTENAME(@username,'')
            print (@query9)
             EXEC (@query9)
           --EXECUTE sp_executesql @query9
           print 'command executed'

         end
        
         SET @i = @i+1
         end
                drop table #Transfer_login

END
End