SQL Server base64编码存储函数

Ale*_*kiy 5 t-sql sql-server base64 encoding

我需要一个简单的存储函数来进行进一步的 SQL Server base64 编码,但它为我传递的每个字符串返回 null。我认为 sql:parameter 不适用于输入函数参数,但不知道如何避免它。

这是我的代码:

ALTER FUNCTION [dbo].[usf_base64_encode]
    (@value nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    RETURN cast('' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varchar(max)')
END
Run Code Online (Sandbox Code Playgroud)

此代码片段可以工作,但它声明了在函数中不可能执行的局部变量。

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
Run Code Online (Sandbox Code Playgroud)

Ale*_*kiy 4

好吧,我确实很愚蠢。这段代码的工作原理:

ALTER FUNCTION [dbo].[usf_base64_encode]
(
    @value varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
    DECLARE @source varbinary(max) = convert(varbinary(max), @value)
    RETURN cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)')
END
Run Code Online (Sandbox Code Playgroud)