У меня есть следующий запрос
DECLARE @userId INT
DECLARE @siteId INT
SET @siteId = -1
SET @userId = 1828
SELECT a.id AS alertId,
a.location_id,
a.alert_type_id,
a.event_id,
a.user_id,
a.site_id,
a.accepted_by
FROM alerts AS a
JOIN alert_types AS ats ON a.alert_type_id = ats.id
JOIN events AS tr ON a.event_id = tr.event_id
WHERE tr.end_Time IS null
AND tr.status_id = 0
AND ats.code = 'E'
AND a.site_id in (SELECT * FROM dbo.udf_get_event_sitelist(@siteId, @userId))
Этот запрос выполняется от 5 до 17 секунд, однако при многих обстоятельствах функция dbo.udf_get_event_sitelist (@siteId, @userId) не возвращает строк, поэтому запрос не найдет никаких данных.
Как заставить SQL Server сначала выполнить пользовательскую функцию? Я ценю, что мог бы переписать запрос в хранимую процедуру и сначала выполнить подвыбор, однако я хотел бы сделать это в одном выражении SQL, если это возможно.