Хорошее использование пробелов и разрывов строк действительно важно, я настоятельно рекомендую использовать оба, чтобы сделать ваш код читабельным (не только для других, но и для вас самих), и, следовательно, проще для отладки.Если вы отформатируете свой код, то причина станет гораздо более очевидной:
ALTER TABLE [dbo].[Employee]
ADD AwardedLeave AS CAST (CASE WHEN [Apprentice] = 'True'THEN 0
WHEN [Apprentice] = 'False' THEN CASE WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate]),01,01) AND DATEFROMPARTS(YEAR([StartDate])+1,12,31) THEN 0
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+2,01,01) AND DATEFROMPARTS(YEAR([StartDate])+2,12,31) THEN 8
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+3,01,01) AND DATEFROMPARTS(YEAR([StartDate])+3,12,31) THEN 16
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+4,01,01) AND DATEFROMPARTS(YEAR([StartDate])+4,12,31) THEN 24
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+5,01,01) AND DATEFROMPARTS(YEAR([StartDate])+5,12,31) THEN 32
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+6,01,01) AND DATEFROMPARTS(YEAR([StartDate])+1000,12,31) THEN 40
END +
CASE WHEN DATEFROMPARTS(YEAR(StartDate), 12,31) >= GETDATE() THEN DATEDIFF(DAY, [StartDate],DATEFROMPARTS(DATEPART(YEAR,[StartDate]),(12), (31)))/(30.42)*13.33
ELSE [ALCategory]
END AS int);
Обратите внимание, ваше первое выражение CASE
не имеет END
;следовательно ошибка в AS
(ожидается ключевое слово END
):
ALTER TABLE [dbo].[Employee]
ADD AwardedLeave AS CAST (CASE WHEN [Apprentice] = 'True'THEN 0
WHEN [Apprentice] = 'False' THEN CASE WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate]),01,01) AND DATEFROMPARTS(YEAR([StartDate])+1,12,31) THEN 0
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+2,01,01) AND DATEFROMPARTS(YEAR([StartDate])+2,12,31) THEN 8
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+3,01,01) AND DATEFROMPARTS(YEAR([StartDate])+3,12,31) THEN 16
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+4,01,01) AND DATEFROMPARTS(YEAR([StartDate])+4,12,31) THEN 24
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+5,01,01) AND DATEFROMPARTS(YEAR([StartDate])+5,12,31) THEN 32
WHEN GETDATE() BETWEEN DATEFROMPARTS(YEAR([StartDate])+6,01,01) AND DATEFROMPARTS(YEAR([StartDate])+1000,12,31) THEN 40
END +
CASE WHEN DATEFROMPARTS(YEAR(StartDate), 12,31) >= GETDATE() THEN DATEDIFF(DAY, [StartDate],DATEFROMPARTS(DATEPART(YEAR,[StartDate]),(12), (31)))/(30.42)*13.33
ELSE [ALCategory]
END
END AS int);