Sql server Varbinary文件提取

Sql server Varbinary文件提取,sql-server,database,Sql Server,Database,我正试图将我的varbinary数据提取为原始格式并保存到一个文件中。这是我到目前为止所做的,它没有显示任何错误,但它没有创建文件 DECLARE @DocumentName varchar(500) = 'C:\' + @LicenseNumber + '\' + @FileType + '\' + convert(nvarchar(MAX), @FileDate, 21) + ' ' + @LicenseNumber + ' ' + @FileTypeCode + ' '

我正试图将我的varbinary数据提取为原始格式并保存到一个文件中。这是我到目前为止所做的,它没有显示任何错误,但它没有创建文件

DECLARE @DocumentName varchar(500) = 'C:\' + @LicenseNumber + '\' + @FileType 
    + '\' + convert(nvarchar(MAX), @FileDate, 21) + ' ' + @LicenseNumber 
    + ' ' + @FileTypeCode + ' ' + @Quarter + @FileExtension 

EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'               
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @DocumentData         
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @DocumentName, 2
EXEC sp_OAMethod @ObjectToken, 'Close'              
EXEC sp_OADestroy @ObjectToken

这里有任何错误,任何人都可以看到吗?

我认为会破坏此脚本的唯一原因是完整路径大于500个字符,并且在分配给@DocumentName时被截断。

结果是DECLARE@DocumentName varchar(500)='C:\',“C:\”部分需要位于运行脚本的服务器上。一旦我将它改为服务器名而不是c:\,它就工作得很好。有时是一些小事把一整天搞得一团糟。:-)

也许不是问题所在。但请仔细检查生成的实际文件名,并确保路径存在且可写。不要在代码中看到任何固有的错误。如果目录和文件名不存在,它不应该创建它们吗?这取决于它是如何在内部编写的。为什么不将@documentname设置为一个已知的有效目录,然后看看它是否有效。我刚刚在本地进行了测试。如果没有有效的现有目录,则不会发生任何事情。使用有效目录,它创建文件。我只是手动创建了本地文件夹,但它仍然没有创建文件。它永远不会接近500个字符。可能是100。你能放一个
PRINT@DocumentName
看看路径是否是你想要的吗?我放了,它显示了我想要的目录结构和文件。你检查过SQL Server服务进程是否被授予了所需的权限吗?此外,ASODB.Stream不会为您创建目录结构。你也检查了吗?我手动创建了目录并在本地运行了这个。为什么会有任何权限?