IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID('dbo.zip_n_move') AND sysstat & 0xf = 4) DROP PROCEDURE dbo.zip_n_move GO CREATE PROCEDURE zip_n_move @dbName VARCHAR(30) = ' ', -- the database name @fileName VARCHAR(30) = ' ', -- file to move less ext @source VARCHAR(30) = ' ', -- source server @sourcePassword VARCHAR(30) = ' ', -- source sa password @dumpShare VARCHAR(10) = 'alle', -- source drive share @dumpFolder VARCHAR(30) = 'backup', -- source folder @target VARCHAR(30) = ' ', -- target server @targetPassword VARCHAR(30) = ' ', -- target sa password @loadShare VARCHAR(10) = 'alle', -- target drive share @loadFolder VARCHAR(30) = 'restore', -- target folder @saPassword VARCHAR(30) = ' ', -- admin sa password @debug VARCHAR(5) = 'false' -- debug AS DECLARE @dumpPath VARCHAR(50), -- fully qualified dump path @dumpArchive VARCHAR(80), -- source archive PATH @loadPath VARCHAR(50), -- fully qualified load path @loadArchive VARCHAR(80), -- target archive PATH @CMD VARCHAR(255), -- reusable command holder @CMDstatus INT, -- return status of command prompt @drive varchar(5), -- logical disk drive @myName VARCHAR(30) -- name of this function /* Evoke a zip utility on the source system First get the logical drive name of the share on the source system. need this to get pkzip to run on that drive on NT3.51 */ SET NOCOUNT ON SELECT @myName = 'zip_n_move' IF (@dbName = ' ') OR (@fileName = ' ') OR (@source = ' ') OR (@target = ' ') BEGIN PRINT "[usage: zip_n_move <file name>, ]" PRINT "[ <source server>, ]" PRINT "[ <source sa password>,]" PRINT "[ <source share>, ]" PRINT "[ <source folder>, ]" PRINT "[ <target server>, ]" PRINT "[ <target sa password>,]" PRINT "[ <target share>, ]" PRINT "[ <target folder>, ]" PRINT "[ <debug?> ]" RETURN 1 END /* IF DATALENGTH(@fileName) > 8 BEGIN SELECT "Short file names required (i.e., 88888888.333)" SELECT "Call to zip_n_move has been aborted" RETURN 1 END */ SELECT @dumpPath = '\\' + @source + '\' + @dumpShare + '\' + @dumpFolder + '\' + @dbName SELECT @dumpArchive = @dumpPath + '\archive' SELECT @loadPath = '\\' + @target + '\' + @loadShare + '\' + @loadFolder + '\' + @dbName SELECT @loadArchive = @loadPath + '\archive' EXEC convert_share_to_drive @dumpShare, @drive OUTPUT, @dumpPath, @source, @sourcePassword, @saPassword, @debug IF @fileName = @dbName SELECT @CMD = @drive + '&cd ' + @dumpfolder + '\' + @dbName + '&pkzip ' + 'archive\' + SUBSTRING(@fileName,1,4) + 'dump.zip ' + SUBSTRING(@fileName,1,4) + 'dump.dat -b' + @drive ELSE SELECT @CMD = @drive + '&cd ' + @dumpfolder + '\' + @dbName + '&pkzip ' + 'archive\' + @fileName + '.zip ' + @fileName + '.dat -b' + @drive SELECT @CMD = "master..xp_cmdshell '" + @CMD + "'" SELECT @CMD = 'isql -Usa -P' + @sourcePassword + ' -S' + @source + ' -dmaster -Q"' + @CMD + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus IF @fileName = @dbName SELECT @CMD = 'copy ' + @dumpArchive + '\' + SUBSTRING(@fileName,1,4) + 'dump.zip ' + @loadArchive + '\' + SUBSTRING(@fileName,1,4) + 'dump.zip ' ELSE SELECT @CMD = 'copy ' + @dumpArchive + '\' + @fileName + '.zip ' + @loadArchive + '\' + @fileName + '.zip' If @debug = 'true' select @CMD EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus convert_share_to_drive @loadShare, @drive OUTPUT, @loadPath, @target, @targetPassword, @saPassword, @debug IF @fileName = @dbName SELECT @CMD = @drive + '&cd ' + @loadfolder + '\' + @dbName + '&pkunzip -o ' + 'archive\' + SUBSTRING(@fileName,1,4) + 'dump.zip ' ELSE SELECT @CMD = @drive + '&cd ' + @loadfolder + '\' + @dbName + '&pkunzip -o ' + 'archive\' + @fileName + '.zip' SELECT @CMD = "master..xp_cmdshell '" + @CMD + "'" SELECT @CMD = 'isql -Usa -P' + @targetPassword + ' -S' + @target + ' -dmaster -Q"' + @CMD + '"' EXEC @CMDstatus = dispatch @CMD, @myName, @debug IF (@CMDstatus <> 0) return @CMDstatus RETURN GO