Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XML + декодирование base64 + сохранение во внешний файл  [new]
mixer.sz
Member

Откуда:
Сообщений: 3
Добрый день, дяденьки. Есть у меня такая не тривиальная задачка, которую хочу я решить средствами TSQL полностью на сервере. SQL Server 2008 R2. Изначальные данные: есть некий XML, в одном из тегов которого хранится закодированная по Base64 строка. Строка эта в раскодированном виде представляет из себя файл - архив. В этом архиве после его разархивирования содержатся нужные мне файлы.
Во время реализации я пока что не смог создать бинарный файл из хранимой процедуры и еще есть проблемы по раскодированию. На данный момент я смог достать из xml закодированную строку. И вроде как раскодировал ее с помощью xml.value (я в xml.value не спец, взял исходник с sql.ru). Проверить это я все-равно не могу, т.к. не знаю как записать бинарный файл из хранимки.
declare @iDoc int, @Name varchar(100), @EncodedText nvarchar(max), @DecodedArcText nvarchar(max)
declare @xml varchar(8000) = ' <encoded text from file> '
EXEC sp_xml_preparedocument @idoc OUTPUT, @xml

SELECT TOP 1 @Name=Name, @EncodedText=Value
FROM  OPENXML (@idoc, '/CryptoConvert/Body/Messages/Message',2)
            WITH (ID  int '@id',
		  KeyId varchar(10) '@keyId',
                  Name varchar(100) '@name',
                  Value nvarchar(max) 'text()'
                  )

SELECT @Name, @EncodedText

select cast(N'' as xml).value('xs:base64Binary(sql:variable("@EncodedText"))', 'varbinary(max)')  

select @DecodedArcText = cast(cast(N'' as xml).value('xs:base64Binary(sql:variable("@EncodedText"))', 'varbinary(max)')  as nvarchar(max)) --  as [decoded_value]; -
select @DecodedArcText, LEN(@EncodedText), LEN(@DecodedArcText)

EXEC sp_xml_removedocument @idoc


Так вот, возможно ли это и имеет ли смысл реализовывать это все чисто внутри хранимой процедуры или проще написать некую стороннюю программу на языке высокого уровня, которая будет реализовывать этот функционал?

К сообщению приложен файл (TEST9.xml - 2Kb) cкачать
19 янв 18, 18:05    [21121322]     Ответить | Цитировать Сообщить модератору
 Re: XML + декодирование base64 + сохранение во внешний файл  [new]
invm
Member

Откуда: Москва
Сообщений: 9270
Получить бинарные данные из Base64:
declare @x xml = ...

select
 t.n.value('@name', 'varchar(200)'),
 t.n.value('.', 'varbinary(max)')
from
 @x.nodes('/CryptoConvert/Body/Messages/Message') t(n);

mixer.sz
Проверить это я все-равно не могу, т.к. не знаю как записать бинарный файл из хранимки.
Читайте про FileTable.
19 янв 18, 18:48    [21121366]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить