我有以下查询
声明 @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 语句中执行此操作。