Microsoft SQL 2016解码Base64列

时间:2016-11-01 16:32:36

标签: sql-server sql-server-2016

我需要帮助解码数据库中的Base64密码列。当我将单个列内容复制到https://www.base64decode.org/时,它会完美地解码。我只需要在此列中的~7000行中执行此操作。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果您尝试在Management Studio(或直接使用T-SQL)中执行此操作,那么您可以像这样完成:

declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max)

set @source = convert(varbinary(max), 'Hello Base64')

set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)')
set @decoded = cast('' as xml).value('xs:base64Binary(sql:variable("@encoded"))', 'varbinary(max)')

select convert(varchar(max), @source) as source_varchar, @source as source_binary, @encoded as encoded, @decoded as decoded_binary, convert(varchar(max), @decoded) as decoded_varchar

来自网站:http://blog.falafel.com/t-sql-easy-base64-encoding-and-decoding/

答案 1 :(得分:1)

您可以使用以下(source):

declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max)

set @source = convert(varbinary(max), 'Hello Base64')

set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)') set @decoded = cast('' as xml).value('xs:base64Binary(sql:variable("@encoded"))', 'varbinary(max)')

select convert(varchar(max), @source) as source_varchar, @source as source_binary, @encoded as encoded, @decoded as decoded_binary, convert(varchar(max), @decoded) as decoded_varchar

...但是,为此创建一个函数,然后:

create function fnDecodeBase64 (@encoded as varchar(max))
returns varchar(max)
as
begin

    declare @decoded varchar(max)

    set @decoded = cast('' as xml).value('xs:base64Binary(sql:variable("@encoded"))', 'varbinary(max)')

    return @decoded

end

所以,你可以使用:

select dbo.fnDecodeBase64(some_column) from Some_Table

您也可以使用:

select convert(varchar(max),cast(N'' as xml).value('xs:base64Binary(sql:column("t.SomeColumn"))', 'varbinary(max)')) as converted_64_column
from SomeTable as t

关键字:sql:column有所不同