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