我正在尝试创建一个 SQL Server 存储过程来从指定的 URL 下载未知的二进制文件类型(通常是 jpg、pdf、zip、rtf 或 doc)。
执行此操作时,我已验证 URL 正在被调用并且文件正在正确下载(其他服务也使用相同的 URL),但脚本没有获取文件内容。
create procedure DownloadFile (@Url varchar(1024))
AS
BEGIN
SET NOCOUNT ON;
declare @obj int
declare @responseBody varchar(8000)
declare @status varchar(50)
declare @statusText varchar(1024)
exec sp_OACreate 'Msxml2.XMLHTTP', @obj out
exec sp_OAMethod @obj, 'Open', null, 'GET', @Url, false
exec sp_OAMethod @obj, 'send'
exec sp_OAGetProperty @obj, 'responseBody', @responseBody out
exec sp_OAGetProperty @obj, 'status', @status out
exec sp_OAGetProperty @obj, 'statusText', @statusText out
exec sp_OADestroy @obj
select @responseBody as responseBody,datalength(@responseBody) as responseBodyDataLength, @status as [status], @statusText as [statusText]
END
显然,@responseBody 类型需要是某种二进制类型,但是当我使用任何二进制类型(例如 binary、varbinary 或 image)时,@responseBody 始终为 NULL。
当我将 @responseBody 声明为 varchar(8000) 时,它以这个奇怪的 9 字符长字符串结束:'?????AA??'。但是,如果我将 @responseBody 声明为 varchar(max),则它最终为 NULL。
我很困惑。
一旦我开始工作,sp 需要将文件内容返回给调用者。