SQL Server:将varbinary PDF导出到客户端上的文件

时间:2014-09-23 14:58:15

标签: sql-server image pdf client varbinary

我正在使用连接到SQL Server的SQL客户端,在执行以下代码后,.pdf文件保存在服务器硬盘上,而不是我的(客户端)。

有没有办法使用查询将文件导出到我的本地硬盘?

DECLARE @ImageData varbinary(max);
SELECT @ImageData = (SELECT CONVERT(varbinary(max), pdfcolumn, 1) 
                     FROM Scans 
                     WHERE id = 1);

DECLARE @Path nvarchar(1024);
SELECT @Path = 'c:\scans';

DECLARE @Filename NVARCHAR(1024);
SELECT @Filename = 'scan.pdf';

DECLARE @FullPathToOutputFile NVARCHAR(2048);
SELECT @FullPathToOutputFile = @Path + '\' + @Filename;

DECLARE @ObjectToken INT
    EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT;
    EXEC sp_OASetProperty @ObjectToken, 'Type', 1;
    EXEC sp_OAMethod @ObjectToken, 'Open';
    EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @ImageData;
    EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FullPathToOutputFile, 2;
    EXEC sp_OAMethod @ObjectToken, 'Close';
    EXEC sp_OADestroy @ObjectToken;

1 个答案:

答案 0 :(得分:0)

正确和预期:命令由服务器上的服务器在专用帐户下执行,该帐户对外部资源的访问权限有限。

在(客户端)hdd上保存文件所必需的技术要求是sql server进程使用的用户帐户必须能够访问该远程磁盘(这并不好);您还必须将目标文件夹指定为UNC路径而不是本地路径。

如果你和rdbms之间有一个dba,如果你要求启用这样的行为,那么这个人会非常不满。

所需步骤:
   - 在用户帐户下运行服务器进程,该用户帐户可以访问服务器和远程客户端上的资源,从而更改服务配置    - 使用目标文件夹的UNC路径设置@Path变量

让我再次强调:这很糟糕,你不想在生产环境中这样做。