从varbinary(max)变量备份文件还原SQL Server备份

问题描述:

我想创建一个应该还原数据库备份的过程。我想通过varbinary(max)类型参数传递备份文件。从varbinary(max)变量备份文件还原SQL Server备份

有可能吗?我找不到任何这方面的参考。

我需要因为备份文件将不会在服务器上执行此任务,这将是一个客户机上。

我需要在代码(C#)上调用此过程。

编辑

今天,我有下面的代码,创建并返回备份文件:

DECLARE @MdfFilePath AS VARCHAR(MAX), 
     @BackupFileName AS VARCHAR(MAX), 
     @DbName AS VARCHAR(MAX) = DB_NAME() 
SELECT 
    @MdfFilePath = physical_name 
FROM 
    sys.master_files 
WHERE 
    database_id = DB_ID(@DbName) 

SELECT @BackupFileName = LEFT(@MdfFilePath,LEN(@MdfFilePath) - charindex('\',reverse(@MdfFilePath),1) + 1) + @DbName +'_' + 
     REPLACE(CONVERT(VARCHAR(MAX), GETDATE(), 121), ':', '-') + '.bak' 

BACKUP DATABASE @DbName 
TO DISK = @BackupFileName 
WITH INIT 


DECLARE @SQL AS NVARCHAR(MAX) 
SET @SQL = 'SELECT * FROM OPENROWSET(BULK ''' + @BackupFileName + ''', SINGLE_BLOB) rs' 

EXEC sp_executesql @SQL 

我需要一个功能,让我通过备份文件到服务器,接下来,恢复它。

+1

没有,据我所知,该文件有**实际存在**在磁盘上,或者在服务器自身的内部磁盘或网络位置(通过UNC路径指定),服务器(和服务器进程'帐户)有权访问。你不能只在备份中传递'varbinary(max)'变量。另外:该变量将被限制为** 2 GB **,并且您的数据库备份可以轻松*超出该限制 –

+0

如果您使用ac#应用程序调用此过程,则可以将.bak文件作为参数传递,如图像或其他文档。 – McNets

+0

@mcNets好的。如何从varbinary(max)流变量恢复备份文件? –

否 - SQL Server引擎必须能够“查看”要恢复的物理文件。您可以实现的最佳目标是将您的客户端PC备份位置设置为SQL Server服务主机服务器可映射到的共享驱动器。