Вот скрипт для помещения содержимого резервной копии базы данных в поток (как результат «выбора»), который может быть полезен для программного создания резервной копии БЕЗ любой общей папки. Единственное, что вам нужно, это подключение к серверу. Протестировано на MSSQL 2008 R2.
-- переменные
DECLARE @dbName nvarchar(MAX);
SET @dbName = N'AdventureWorks';
DECLARE @backupFileName nvarchar(MAX);
SET @backupFileName = N'C:\Temp\' + @dbName + N'.bak';
--EXECUTE (N'PRINT N''Создание бэкапа '+ @backupFileName + '''')
-- создание временной папки
EXEC xp_cmdshell N'mkdir C:\Temp', no_output;
-- бэкап с перетиранием имеющегося файла
DECLARE @sqlScript nvarchar(MAX);
SET @sqlScript = N'BACKUP DATABASE ['
+ @dbName
+ '] TO DISK = N'''
+ @backupFileName
+ ''' WITH NOFORMAT, INIT, NAME = N'''
+ @dbName
+ '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10';
--SELECT @sqlScript AS backupScript
EXECUTE (@sqlScript);
-- похоже, файл в 3ГБ можно вычитать... но памяти на это уходит ОЧЕНЬ МНОГО
-- вычитывание файла
SET @sqlScript = N'
SELECT N''' + @backupFileName + ''' AS [backupFileName], BulkColumn AS [backupContent]
FROM OPENROWSET (BULK ''' + @backupFileName + ''', SINGLE_BLOB) MyFile';
--SELECT @sqlScript AS openRowsetScript
EXECUTE (@sqlScript);
-- удаление файла
SET @sqlScript = N'EXEC xp_cmdshell ''del "' + @backupFileName + '"'', no_output';
EXECUTE (@sqlScript);
Результат выглядит следующим образом:
backupFileName backupContent
C:\Temp\AdventureWorks.bak 0x54415045000003008C000E01000000000000000000000000000...