Проблема со скалярной UDF-вставкой в SQL Server 2019
Приведенная ниже функция завершится сбоем, когда я запустил ее в первый раз со следующей ошибкой:
8124 (В агрегированном выражении, содержащем внешнюю ссылку, указано несколько столбцов.)
Второй раз, когда я запускаю его, он работает нормально.
Если я удалю *DATEDIFF(D, e.FRADATO , @til)
нет проблем.
ALTER FUNCTION [dbo].[fnc_2019_test]
(@m_id INT, @fra DATE, @til DATE)
RETURNS INT
AS
BEGIN
RETURN
(SELECT
SUM(ISNULL(e.FORBRUK, 0) * DATEDIFF(D, e.FRADATO, @til))
FROM
dbo.mlr_eos_avl e
WHERE
e.MÅLER_ID = @m_id
AND @fra < e.DATO
AND DATEADD(D, -1, @til) >= e.FRADATO)
END
Эта функция работает в SQL Server 2008 R2 и SQL Server 2016 без каких-либо проблем.
1 ответ
SQL Server 2019 все еще находится в CTP, и это новая функция. Если вы нашли ошибку в ней, вы должны сообщить об этом в Microsoft, чтобы она была исправлена перед выпуском ( сделано для вас здесь).
В предыдущих версиях, если вы попытаетесь вставить его вручную, вы увидите ту же ошибку (как в урезанном примере ниже). Это из-за ограничения, обсуждаемого здесь.
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)
Пока этот встроенный случай не будет исправлен Microsoft, вы можете использовать
WITH INLINE = OFF
в скалярном определении UDF, чтобы отключить встраивание UDF