• Hi Sue,

    FYI  here is my script quick and dirty  ..put it in your toolbox..didn't need it,  but did the work anyway

    --============================================================================

    -- Restore file list from from bak file to different paths

    -- table to hold file list

    DECLARE @tmpFileList TABLE

    (

    LogicalName NVARCHAR(128)

    , PhysicalName NVARCHAR(260)

    , Type CHAR(1)

    , FileGroupName NVARCHAR(128)

    , Size NUMERIC(20, 0)

    , MaxSize NUMERIC(20, 0)

    , Fileid TINYINT

    , 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

    , TDEThumbptint VARBINARY

    )

    DECLARE @debug int = 0

    DECLARE @restoreFromFileList varchar(8000)

    DECLARE @quote varchar(10) = ''''

    DECLARE @bakFilePath varchar(4000) = 'C:\RobinWork\Backups\dbBackup\EDW.bak'

    set @restoreFromFileList = 'RESTORE FILELISTONLY FROM DISK = '+ @quote + @bakFilePath + + @quote

    IF @debug =1

    print @restoreFromFileList

    -- insert into temp table

    INSERT INTO @tmpFileList EXEC (@restoreFromFileList)

    IF @debug =1

    select * from @tmpFileList

    DECLARE @dbName varchar(255) = 'mydb'

    DECLARE @restoredb varchar(8000)

    DECLARE @mdfLogicalName varchar(255)

    DECLARE @mdfPhysicalname varchar(255) = 'C:\temp\' + @dbName + '.mdf'

    DECLARE @ldfLogicalName varchar(255)

    DECLARE @ldfPhysicalname varchar(255) = 'C:\temp\' + @dbName + '_log.ldf'

    SELECT @mdfLogicalName = logicalname

    FROM @tmpFileList

    WHERE physicalname LIKE '%.mdf'

    SELECT @ldfLogicalName = logicalname

    FROM @tmpFileList

    WHERE physicalname LIKE '%.ldf'

    if @debug =1

    BEGIN

    print @mdfLogicalName

    print @mdfPhysicalname

    print @ldfLogicalName

    print @ldfPhysicalname

    END

    SET @restoredb = ''

    SET @restoredb = @restoredb + ' RESTORE DATABASE ['+ @dbName + ']'

    SET @restoredb = @restoredb + ' FROM DISK = '+ @quote + @bakFilePath + @quote

    SET @restoredb = @restoredb + ' WITH MOVE '+ @quote + @mdfLogicalName + @quote + ' TO '+ @quote + @mdfPhysicalname + @quote + ','

    SET @restoredb = @restoredb + ' MOVE '+ @quote + @ldfLogicalName + @quote + ' TO '+ @quote + @ldfPhysicalname + @quote + ','

    if @debug=1

    print @restoredb

    -- table to hold ndf files

    DECLARE @tmpNDFFiles TABLE

    (

    LogicalName varchar(255)

    , Physicalname varchar(255)

    , rowid int identity

    )

    INSERT @tmpNDFFiles(LogicalName,Physicalname)

    SELECT LogicalName , PhysicalName

    FROM @tmpFileList

    WHERE physicalname LIKE '%.ndf'

    if @debug=1

    select * from @tmpNDFFiles

    DECLARE @restoreNDF varchar(8000) = ''

    DECLARE @counter int

    DECLARE @ndfLogicalName varchar(255)

    DECLARE @ndfPhysicalPath varchar(255) = 'c:\temp'

    SET @counter = 0

    WHILE @counter < (SELECT COUNT(*) from @tmpNDFFiles)

    BEGIN

    SET @counter = @counter + 1

    SELECT @ndfLogicalName = logicalname

    FROM @tmpNDFFiles

    WHERE rowid = @counter

    SET @restoreNDF = @restoreNDF + ' MOVE '+ @quote + @ndfLogicalName + @quote + ' TO '+ @quote + @ndfPhysicalPath + '\' + @ndfLogicalName + '.ndf' + @quote + ',' + CHAR(13) + CHAR(10)

    END

    -- Add the tail

    SET @restoreNDF = @restoreNDF + ' REPLACE, STATS = 20 '

    if @debug= 1

    print @restoreNDF

    DECLARE @totalRestore varchar(max) = @restoredb + @restoreNDF

    print @totalRestore

    exec(@totalRestore)