I\'m not very fluent with SQL Server commands.
I need a script to restore a database from a .bak file and move the logical_data and logical_log files to a specific p
None of the versions include SQL 2000. This will work on all of them:
use master
--
-- check SQL Server version
DECLARE @sql_ver int;
CREATE TABLE #tmp_sql_ver
(
[Index] int,
[Name] nvarchar(100),
[iVal] int,
[cVal] nvarchar(100)
)
INSERT INTO #tmp_sql_ver EXEC('xp_msver ProductVersion');
IF (SELECT cast(cVal as char(2)) FROM #tmp_sql_ver) = '8.'
SET @sql_ver = 8;
ELSE
SET @sql_ver = 9;
DROP TABLE #tmp_sql_ver;
--
-- get mdf/ldf names
DECLARE @mdf_name varchar(50)
DECLARE @ldf_name varchar(50)
DECLARE @RestoreFileListOnly_columns varchar(2000)
IF (@sql_ver = 8)
BEGIN
SET @RestoreFileListOnly_columns = '
LogicalName nvarchar(128),
PhysicalName nvarchar(260),
[Type] char(1),
FileGroupName nvarchar(128),
[Size] numeric(20,0),
[MaxSize] numeric(20,0),
'
END
ELSE
BEGIN
SET @RestoreFileListOnly_columns = '
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) NULL,
UniqueID uniqueidentifier,
ReadOnlyLSN numeric(25,0) NULL,
ReadWriteLSN numeric(25,0) NULL,
BackupSizeInBytes bigint,
SourceBlockSize int,
FileGroupID int,
LogGroupGUID uniqueidentifier NULL,
DifferentialBaseLSN numeric(25,0) NULL,
DifferentialBaseGUID uniqueidentifier,
IsReadOnly bit,
IsPresent bit
'
DECLARE @tmp_ver NVARCHAR(20)
SELECT @tmp_ver = CAST(SERVERPROPERTY ('PRODUCTVERSION') AS NVARCHAR)
IF @tmp_ver LIKE '1[01].%'
BEGIN
SET @RestoreFileListOnly_columns = @RestoreFileListOnly_columns + ', TDEThumbpr DECIMAL'
END
END
IF EXISTS (SELECT [table_name] FROM information_schema.tables WHERE [table_name] = 'tmp_RestoreFileListOnly')
BEGIN
DROP TABLE [tmp_RestoreFileListOnly];
END
EXEC ('CREATE TABLE tmp_RestoreFileListOnly ('+@RestoreFileListOnly_columns+');');
INSERT INTO tmp_RestoreFileListOnly EXEC('RESTORE FILELISTONLY FROM DISK = ''' + @bkpfile + '''')
PRINT 'RESTORE FILELISTONLY FROM DISK = ''' + @bkpfile + ''''
--IF @@ROWCOUNT <> 2 RETURN
SELECT @mdf_name = LogicalName FROM tmp_RestoreFileListOnly WHERE Type = 'D'
SELECT @ldf_name = LogicalName FROM tmp_RestoreFileListOnly WHERE Type = 'L'
DROP TABLE tmp_RestoreFileListOnly