微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 2019 将 Base64 编码打破为标量值函数

如何解决SQL Server 2019 将 Base64 编码打破为标量值函数

我有一个标量值函数,我已经在我的数据库中使用了多年。它总是正常工作。我最近将数据库移至 sql Server 2019,当我将兼容级别更改为 sql Server 2019 (150) 时,我的功能像硝酸甘油一样爆炸。将兼容性级别恢复到 sql Server 2017 (140) 允许一切正常运行。

这是函数

CREATE FUNCTION [dbo].[Authentication_SHA1ToBase64](@source AS varchar(8000))
RETURNS varchar(8000)
BEGIN

    DECLARE
        @bin    varbinary(8000),@result varchar(8000)

    SET @bin = CONVERT(varbinary(8000),@source)

    RETURN CAST(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))','varchar(8000)')

END

sql Server 2019 (150) 兼容级别,以下内容

SELECT [dbo].[Authentication_SHA1ToBase64]('0x640AB2BAE07bedC4C163F679A746F7AB7FB5D1FA')

错误如下:

Msg 596,Level 21,State 1,Line 0
Cannot continue the execution because the session is in the kill state.
Msg 0,Level 20,State 0,Line 0
A severe error occurred on the current command.  The results,if any,should be discarded.

奇怪的是,如果我只是像查询一样执行:

DECLARE
    @bin    varbinary(8000)

SET @bin = CONVERT(varbinary(8000),'0x640AB2BAE07bedC4C163F679A746F7AB7FB5D1FA')

SELECT [Result]=CAST(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))','varchar(8000)')

我得到了预期的结果:

Result
--------------------------------------------------------
MHg2NDBBQjJCQUUwN0JFREM0QzE2M0Y2NzlBNzQ2RjdBQjdGQjVEMUZB

也许存在一些破坏功能的内部异步问题?任何人都知道 sql Server 2019 中是否有更新的方法来转换为 base64?

更新:@@VERSION 是:Microsoft sql Server 2019 (RTM-GDR) (KB4583458) - 15.0.2080.9 (X64) Nov 6 2020 16:50:01 版权所有 (C) 2019 Microsoft Corporation Standard Edition(64 位) ) 在 Windows Server 2019 Datacenter 10.0(内部版本 17763:)(管理程序)

解决方法

我更新到 CU9,将兼容性修改回 150,并且有效! Microsoft SQL Server 2019 (RTM-CU9) (KB5000642) - 15.0.4102.2 (X64) 2021 年 1 月 25 日 20:16:12 版权所有 (C) 2019 Microsoft Corporation Standard Edition(64 位),Windows Server 2019 Datacenter 10.0 (Build) :)(管理程序)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。