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)
好吧,我确实很愚蠢。这段代码的工作原理:
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)