Процедура восстановления DB из bak-файла @DeviceName. Он работает с БД, у которых есть два логических файла. Как использовать:
EXEC RestoreDb @dbName='qqq', @DeviceName = 'D:\temp\1\R.bak'
Извините за мой английский, я его улучшить.
CREATE PROCEDURE RestoreDb
@dbName NVARCHAR(50),
@DeviceName NVARCHAR(400)
AS
SET NOCOUNT ON
DECLARE @Cmd NVARCHAR(1000),
@DataLogicalName NVARCHAR(200),
@LogLogicalName NVARCHAR(200),
@DatabasePath NVARCHAR(200),
@DataPath NVARCHAR(300),
@LogPath NVARCHAR(300)
CREATE TABLE #Files
(
LogicalName nvarchar(128),
PhysicalName nvarchar(260),
[Type] char(1),
FileGroupName nvarchar(128),
Size numeric(20,0),
MaxSize numeric(20,0),
FileID bigint,
CreateLSN numeric(25,0),
DropLSN numeric(25,0),
UniqueID uniqueidentifier,
ReadOnlyLSN numeric(25,0) ,
ReadWriteLSN numeric(25,0),
BackupSizeInBytes bigint,
SourceBlockSize int,
FileGroupID int,
LogGroupGUID uniqueidentifier,
DifferentialBaseLSN numeric(25,0),
DifferentialBaseGUID uniqueidentifier,
IsReadOnly bit,
IsPresent bit,
TDEThumbprint varbinary(32)
)
SELECT @DatabasePath = 'D:\data\'
SELECT @DataPath = @DatabasePath + @dbName + '.mdf',
@LogPath = @DatabasePath + @dbName + '.ldf'
SELECT @Cmd = 'RESTORE FILELISTONLY
FROM DISK = ''' + @DeviceName + ''''
INSERT #Files
EXEC (@Cmd)
IF NOT EXISTS(SELECT 1 FROM #Files) GOTO ERRORFILES
IF (SELECT COUNT(*) FROM #Files) > 2 GOTO ERRORFILESCOUNT
SELECT @DataLogicalName = LogicalName
FROM #Files
WHERE [Type] = 'D'
SELECT @LogLogicalName = LogicalName
FROM #Files
WHERE [Type] = 'L'
RESTORE DATABASE @DbName
FROM DISK = @DeviceName
WITH
MOVE @DataLogicalName TO @DataPath,
MOVE @LogLogicalName TO @LogPath
GOTO EXITSTAT
ERRORFILES:
BEGIN
RAISERROR('The list of files contained in the backup set is empty', 16, 1)
GOTO EXITSTAT
END
ERRORFILESCOUNT:
BEGIN
RAISERROR('The count of files contained in the backup set is more than two', 16, 1)
GOTO EXITSTAT
END
EXITSTAT:
Переведено для ответа в соответствии с номинацией @MisterPositive. –
@GuillaumeCR Я назначаю, что вы делаете это ответ сэр. –
Похоже, вы хорошо знаете, как будет выглядеть эта процедура. Предложите свой первый проект proc, и я уверен, что вы получите полезную обратную связь. – tlemaster