Я нашел @@ROWCOUNT
, когда он используется внутри User Defined Function
в MS SQL Сервер 2019, он больше не работает должным образом.
Я не знаю, является ли это MS SQL ошибка или желаемое изменение поведения.
Есть ли возможность go вернуться к поведению 2019 года предыдущих версий? Что-то не так с настройкой установки?
Вот код и результаты вашего собственного теста:
CREATE FUNCTION [dbo].[udfScalar](@test NVARCHAR(255)) RETURNS int
AS BEGIN
DECLARE @var AS NVARCHAR(255)
DECLARE @ROWCOUNT AS INT = NULL
select top 1 @var = 'test' from FooTable where 1 = 0
SET @ROWCOUNT = @@ROWCOUNT
RETURN @ROWCOUNT;
END
GO
DECLARE @var AS NVARCHAR(255)
DECLARE @ROWCOUNT AS INT = NULL
select top 1 @var = 'test' from FooTable where 1 = 0
SET @ROWCOUNT = @@ROWCOUNT
select @ROWCOUNT '@@ROWCOUNT in T-SQL', [dbo].[udfScalar]('test') '@@ROWCOUNT in UDF', @@VERSION 'MS SQL VERSION'
drop FUNCTION [dbo].[udfScalar]
Результат в MS SQL Сервер 2019 (неверный):
@@ROWCOUNT in T-SQL: 0
@@ROWCOUNT in UDF: 1
MS SQL VERSION: Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24 2019 13:48:23
Copyright (C) 2019 Microsoft Corporation
Standard Edition (64-bit) on Windows Server 2019 Standard 10.0 <X64> (Build 17763: ) (Hypervisor)
Обратите внимание, что UDF
возвращает 1
, когда результат должен быть 0
из-за where 1 = 0
.
Результат в MS SQL Server 2016 и предыдущих версиях ( правильно):
@@ROWCOUNT in T-SQL: 0
@@ROWCOUNT in UDF: 0
MS SQL VERSION: Microsoft SQL Server 2016 (SP2-GDR) (KB4505220) - 13.0.5101.9 (X64)
Jun 15 2019 23:15:58
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)
Сейчас у меня нет доступа к SQL Server 2017, но я считаю, что это было правильно.