我正在使用连接到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;
答案 0 :(得分:0)
正确和预期:命令由服务器上的服务器在专用帐户下执行,该帐户对外部资源的访问权限有限。
在(客户端)hdd上保存文件所必需的技术要求是sql server进程使用的用户帐户必须能够访问该远程磁盘(这并不好);您还必须将目标文件夹指定为UNC路径而不是本地路径。
如果你和rdbms之间有一个dba,如果你要求启用这样的行为,那么这个人会非常不满。
所需步骤:
- 在用户帐户下运行服务器进程,该用户帐户可以访问服务器和远程客户端上的资源,从而更改服务配置
- 使用目标文件夹的UNC路径设置@Path
变量
让我再次强调:这很糟糕,你不想在生产环境中这样做。