Проблема со скалярной UDF-вставкой в ​​SQL Server 2019 - PullRequest
2 голосов
/ 06 марта 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 Ответ

3 голосов
/ 06 марта 2019

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

...