Я тестировал оба запроса в Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
. Между ними нет разницы в производительности, за исключением того, что SELECT CASE немного опережает время в миллисекундах.
SELECT GETUTCDATE()
GO
--IF DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday')
-- SELECT 'Weekend';
--ELSE
-- SELECT 'Weekday';
select
case when DATENAME(SECOND, GETDATE()) IN (N'Saturday', N'Sunday')
then 'Weekend'
else
'Weekday'
end
GO 50
SELECT GETUTCDATE()
GO
For IF ELSE logi c:
SELECT DATEDIFF (MILLISECOND, ' 2020-07-09 04: 40: 21.170 ',' 2020-07-09 04: 40: 27.693 ')
- 6523 миллисекунды
Для CASE logi c: SELECT DATEDIFF (MILLISECOND, '2020-07-09 04: 41: 35.580', '2020-07-09 04: 41: 41.973')
- 6393 миллисекунды
Но, как упоминал @Dale K, они обычно имеют разные варианты использования. SELECT помогает одновременно устанавливать несколько значений переменных. Если Else logi c, вам необходимо установить значения отдельно. Если еще logi c, внутри может быть много бизнес-logi c. SELECT CASE - это отдельный запрос.