Давайте создадим временную таблицу и заполним ее примерами данных
CREATE TABLE #testr
(ID INT,
DAT DATE
);
INSERT INTO #testr
VALUES
(1,
'20190101'
),
(2,
'20190201'
);
Итак, оператор SELECT создает что-то похожее на изображение ниже
Давайте создадим простую скалярную функцию, как показано во фрагменте ниже. Функция возвращает дату месяца как целое число.
CREATE FUNCTION dbo.TestFunct
(@DATE DATETIME
)
RETURNS INT
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @result INT;
SET @result = DATEPART(MONTH, @DATE);
RETURN(@result);
END;
Давайте попробуем с оператором APPLY
-- INSERT INTO the second table
SELECT RESULT.R + id
FROM #testr T
CROSS APPLY
(
SELECT dbo.TestFunct(T.DAT) R
) RESULT;
Результат показан на рисунке ниже.