7

这是我的示例代码

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,并将 db 置于 2017 兼容模式

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

4

2 回答 2

6

Scalar udf 再次内联,相当错误

SELECT dbo.rowcount_test()

OPTION (USE HINT('DISABLE_TSQL_SCALAR_UDF_INLINING'));
于 2019-11-20T11:16:52.810 回答
4

现在应该解决这个问题。

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

此累积更新还会在以下情况下阻止内联:

  • 如果 UDF 引用了某些内在函数(例如 @@ROWCOUNT),这些函数可能会在内联时改变结果
于 2020-03-23T15:13:23.893 回答