Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Получить бинарные данные из 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);
|
||
19 янв 18, 18:48 [21121366] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |