我有以下查询
声明 @userId INT 声明 @siteId INT 设置@siteId = -1 设置@userId = 1828 选择 a.id 作为 alertId, a.location_id, a.alert_type_id, a.event_id, a.user_id, a.site_id, a.accepted_by FROM 警报作为 加入 alert_types AS ats ON a.alert_type_id = ats.id 加入事件 AS tr ON a.event_id = tr.event_id WHERE tr.end_Time 为空 AND tr.status_id = 0 和 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 语句中执行此操作。