MS SQL 2019 中 UDF 内的意外 @@rowcount 行为

Unexpected @@rowcount behavior inside an UDF in MS SQL 2019

这是我的示例代码

drop function rowcount_test
go
CREATE FUNCTION dbo.rowcount_test () RETURNS INT AS
BEGIN
    DECLARE @v INT
    SELECT @v = 1
    return @@ROWCOUNT
END
GO
grant exec on dbo.rowcount_test to public
go
SELECT dbo.rowcount_test()

mssql 2017(及更早版本)执行时返回 1

mssql 2019执行时返回0

在 mssql 2019(标准版)执行时给出 1,数据库设置为 2017 兼容模式

以前从来没有出现过问题...这是一种影响代码的设置还是MSSQL 2019中的一种错误?

标量 udf 再次内联,相当有问题

SELECT dbo.rowcount_test()

OPTION (USE HINT('DISABLE_TSQL_SCALAR_UDF_INLINING'));

现在应该修复了。

https://support.microsoft.com/en-us/help/4538581/fix-scalar-udf-inlining-issues-in-sql-server-2019

This cumulative update also blocks Inlining in the following scenarios:

  • If the UDF references certain intrinsic functions (e.g. @@ROWCOUNT) that may alter the results when Inlined