Хочу поделиться способом преобразования строки в Base64 и обратно. Сразу оговорюсь, что способ не самый быстрый, но главное его преимущество в том, что он работает прямо «из коробки» без применения специальных CLR функций. Нам потребуется тестовая база данных и таблица для примера:
use [master]; go if db_id('Base64_test') is not null begin alter database [Base64_test] set single_user with rollback immediate; drop database [Base64_test]; end go create database [Base64_test]; go use [Base64_test]; create table [dbo].[Base64_test] ( [plain_text] nvarchar(max), [base64_text] nvarchar(max) ); go insert into [dbo].[Base64_test] ([plain_text], [base64_text]) values (N'My Test String', N'TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA=='); go |
Пример конвертации строки в Base64:
-- Конвертируем значение переменной declare @value varbinary(max); set @value = cast(N'My Test String' as varbinary(max)); select cast(N'' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varchar(max)') as [encoded_value]; go -- Конвертируем значение столбца в таблице select cast(N'' as xml).value('xs:base64Binary(sql:column("plain_text"))', 'varchar(max)') as [encoded_value] from ( select cast([plain_text] as varbinary(max)) as [plain_text] from [dbo].[Base64_test] ) as tmp; go |
Пример обратного преобразования:
-- Конвертируем значение select cast(cast(N'' as xml).value('xs:base64Binary("TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA==")', 'varbinary(max)') as nvarchar(max)) as [decoded_value]; go -- Конвертируем значение переменной declare @value varchar(max) set @value = 'TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA==' select cast(cast(N'' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varbinary(max)') as nvarchar(max)) as [decoded_value]; go -- Конвертируем значение столбца в таблице select cast(cast(N'' as xml).value('xs:base64Binary(sql:column("base64_text"))', 'varbinary(max)') as nvarchar(max)) as [decoded_value] from [dbo].[Base64_test]; go |