sp_OAMethod возвращает значение, которое указывает, было ли действие выполнено без ошибок.Вы можете попытаться отследить проблему, заключив в каждый вызов похожий код:
EXEC @hr = sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
IF @hr <> 0
BEGIN
RAISERROR('Error %d ADODB.Stream.', 16, 1, @hr)
RETURN
END
EXEC @hr = sp_OASetProperty @ObjectToken, 'Type', 1
IF @hr <> 0
BEGIN
RAISERROR('Error %d Type.', 16, 1, @hr)
RETURN
END
EXEC @hr = sp_OAMethod @ObjectToken, 'Open'
IF @hr <> 0
BEGIN
RAISERROR('Error %d Open.', 16, 1, @hr)
RETURN
END
EXEC @hr = sp_OAMethod @ObjectToken, 'Write', NULL, @BinaryData
IF @hr <> 0
BEGIN
SET @Error='Error %d Write. '+@SourceName
RAISERROR(@Error, 16, 1, @hr)
RETURN
END
EXEC @hr = sp_OAMethod @ObjectToken, 'SaveToFile', NULL, @FilePath, 2
IF @hr <> 0
BEGIN
RAISERROR('Error %d SaveToFile.', 16, 1, @hr)
RETURN
END
EXEC @hr = sp_OAMethod @ObjectToken, 'Close'
IF @hr <> 0
BEGIN
RAISERROR('Error %d Close.', 16, 1, @hr)
RETURN
END
EXEC @hr = sp_OADestroy @ObjectToken
IF @hr <> 0
BEGIN
RAISERROR('Error %d Destroy.', 16, 1, @hr)
RETURN
END