Ich habe die folgende Abfrage eine Abfrage in einer bestimmten ReihenfolgeWie kann ich SQL Server zwingen
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))auszuführen
Diese Abfrage dauert zwischen 5 und 17 Sekunden zu laufen, aber unter vielen Umständen die Funktion dbo.udf_get_event_sitelist (@siteId, @userId) gibt keine Zeilen zurück, daher findet die Abfrage keine Daten.
Wie kann ich SQL Server zwingen, die benutzerdefinierte Funktion zuerst auszuführen. Ich schätze, dass ich die Abfrage in eine gespeicherte Prozedur umschreiben und die Unterauswahl zuerst ausführen könnte, jedoch möchte ich es in einer einzigen SQL-Anweisung tun, wenn möglich.
Können Sie den Code aus dem UDF zu bitte posten, ich vermute, dass Sie besser dran sein kann wieder- Schreiben dieser Logik, vielleicht als Unterabfrage oder CTE. –
Ich sehe hier keinen gespeicherten Prozess, nur eine Abfrage und eine Funktion. Sind diese INNER, OUTER oder CROSS Joins? – StingyJack
Sie sind INNER JOINS (der Standard, wenn der Join-Typ nicht angegeben ist) –