powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XML + декодирование base64 + сохранение во внешний файл
2 сообщений из 2, страница 1 из 1
XML + декодирование base64 + сохранение во внешний файл
    #39587288
mixer.sz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, дяденьки. Есть у меня такая не тривиальная задачка, которую хочу я решить средствами TSQL полностью на сервере. SQL Server 2008 R2. Изначальные данные: есть некий XML, в одном из тегов которого хранится закодированная по Base64 строка. Строка эта в раскодированном виде представляет из себя файл - архив. В этом архиве после его разархивирования содержатся нужные мне файлы.
Во время реализации я пока что не смог создать бинарный файл из хранимой процедуры и еще есть проблемы по раскодированию. На данный момент я смог достать из xml закодированную строку. И вроде как раскодировал ее с помощью xml.value (я в xml.value не спец, взял исходник с sql.ru). Проверить это я все-равно не могу, т.к. не знаю как записать бинарный файл из хранимки.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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



Так вот, возможно ли это и имеет ли смысл реализовывать это все чисто внутри хранимой процедуры или проще написать некую стороннюю программу на языке высокого уровня, которая будет реализовывать этот функционал?
...
Рейтинг: 0 / 0
XML + декодирование base64 + сохранение во внешний файл
    #39587300
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получить бинарные данные из Base64:
Код: sql
1.
2.
3.
4.
5.
6.
7.
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.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / XML + декодирование base64 + сохранение во внешний файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]