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) 6 ноября 2020 г. 16:50:01 Copyright (C) 2019 Microsoft Corporation Standard Edition (64-разрядная версия) для Windows Server 2019 Datacenter 10.0 (сборка 17763:) (гипервизор)


person jscarle    schedule 18.02.2021    source источник
comment
Какая у вас версия SQL Server (SELECT @@VERSION;)?   -  person Yitzhak Khabinsky    schedule 18.02.2021
comment
Ошибка уровня 20 или 21 пахнет ошибкой в ​​SQL Server, особенно если она устраняется путем изменения уровня совместимости.   -  person Alejandro    schedule 18.02.2021
comment
ОП очевидно использует SQL Server 2019, @YitzhakKhabinsky.   -  person Larnu    schedule 18.02.2021
comment
Я чувствую запах встроенной проблемы. Если вы отключите встраивание, держу пари, это сработает, как и ожидалось.   -  person Larnu    schedule 18.02.2021
comment
Проверьте журнал ошибок SQL Server на наличие соответствующих сообщений. Дамп указывает на ошибку. Убедитесь, что вы используете последнюю версию CU.   -  person Dan Guzman    schedule 18.02.2021
comment
@Larnu, чтобы помочь, нам нужна полная версия SQL Server, включая ее сборку. В разных сборках 2019 года было много ошибок, связанных с udfs.   -  person Yitzhak Khabinsky    schedule 18.02.2021
comment
В ответ на сообщение @@VERSION: Microsoft SQL Server 2019 (RTM-GDR) (KB4583458) — 15.0.2080.9 (X64) 6 ноября 2020 г. 16:50:01 Copyright (C) 2019 Microsoft Corporation Standard Edition (64-разрядная версия) на Windows Server 2019 Datacenter 10.0 ‹X64› (сборка 17763:) (гипервизор)   -  person jscarle    schedule 18.02.2021
comment
Если вы используете последнюю версию CU, отправьте сообщение об ошибке в Azure.   -  person Charlieface    schedule 18.02.2021
comment
15.0.2080.9 — это просто обновление GDR; так что да, вы отстали на 9 CU (последняя версия 15.0.4102.2). Как предлагали другие, я бы предложил обновить до последней версии CU, так как они не будут устранять ошибку в старом CU.   -  person Larnu    schedule 18.02.2021
comment
Я обновился до CU9, изменил совместимость до 150, и все работает! Microsoft SQL Server 2019 (RTM-CU9) (KB5000642) — 15.0.4102.2 (X64) 25 января 2021 г. 20:16:12 Copyright (C) Microsoft Corporation Standard Edition 2019 (64-разрядная версия) в Windows Server 2019 Datacenter 10.0 ‹X64› (Сборка 17763:) (Гипервизор)   -  person jscarle    schedule 18.02.2021


Ответы (1)


Я обновился до CU9, изменил совместимость до 150, и все работает! Microsoft SQL Server 2019 (RTM-CU9) (KB5000642) — 15.0.4102.2 (X64) 25 января 2021 г. 20:16:12 Copyright (C) Microsoft Corporation Standard Edition 2019 (64-разрядная версия) в Windows Server 2019 Datacenter 10.0 (сборка 17763) : ) (Гипервизор)

person jscarle    schedule 18.02.2021