ari*_*ldh 4 t-sql sql-server user-defined-functions sql-server-2019
当我第一次运行下面的函数时,它会失败并出现以下错误:
\n\n\n\n\n8124(在包含外部引用的聚合表达式中指定了多个列。)
\n
第二次运行就正常了。
\n\n如果我删除*DATEDIFF(D, e.FRADATO , @til) 它\xe2\x80\x99s 没问题。
ALTER FUNCTION [dbo].[fnc_2019_test] \n (@m_id INT, @fra DATE, @til DATE) \nRETURNS INT\nAS \nBEGIN \n RETURN\n (SELECT \n SUM(ISNULL(e.FORBRUK, 0) * DATEDIFF(D, e.FRADATO, @til))\n FROM \n dbo.mlr_eos_avl e \n WHERE \n e.M\xc3\x85LER_ID = @m_id \n AND @fra < e.DATO \n AND DATEADD(D, -1, @til) >= e.FRADATO) \n\nEND\nRun Code Online (Sandbox Code Playgroud)\n\n该函数在SQL Server 2008 R2和SQL Server 2016中运行没有任何问题。
\nSQL Server 2019 仍处于 CTP 状态,这是一项新功能。如果您发现其中的错误,您应该将其报告给 Microsoft,以便在发布之前修复它(此处已为您完成)。(编辑这个bug现在已经被标记为已修复,大概是在CU6中)
在以前的版本中,如果您尝试手动内联它,您将看到相同的错误(如下面的简化示例所示)。这是因为这里讨论的限制。
WITH T(m_id,fra, til) AS
(
SELECT 1, GETDATE(), GETDATE()
)
SELECT *
FROM T
CROSS APPLY
(SELECT
SUM(DATEDIFF(D, e.FRADATO, til))
FROM
dbo.mlr_eos_avl e
) CA(result)
Run Code Online (Sandbox Code Playgroud)
在 Microsoft 修复此内联大小写之前,您可以使用
WITH INLINE = OFF
Run Code Online (Sandbox Code Playgroud)
在标量 UDF 定义中禁用 UDF 内联
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |