SQL Сервер 2016 против 2019 функций - PullRequest
0 голосов
/ 10 января 2020

Что-то изменилось в функциях с SQL Server 2016 до версии 2019.

Это тестовая функция:

create function [dbo].[TestFunction]
(
    @input uniqueidentifier
)
returns uniqueidentifier
as
begin
    select top 0 @input = id from randomTable;

    return
    (
        select  @input
    )
end

Если я попробую этот код в SQL Server 2016 результат является входным значением, но на SQL сервере 2019 результат равен нулю.

Может кто-то указать мне правильное направление, что изменилось?

1 Ответ

1 голос
/ 11 января 2020

Возвращенное значение NULL вызвано скалярным вложением udf:

Неожиданное поведение @@ rowcount внутри UDF в MS SQL 2019

, если вы хотите использовать функцию чтобы воспользоваться встроенными и вернуть правильные результаты, вы можете изменить его на:

create function [dbo].[TestFunction]
(
    @input uniqueidentifier
)
returns uniqueidentifier
--WITH INLINE = ON
as
begin
    --select top (0) @input= id from randomTable

    return
    (
        isnull((select top (0) id from randomtable), @input)
    )
end
...