次のクエリがあります
DECLARE @userId INT
DECLARE @siteId INT
SET @siteId = -1
SET @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 アラート AS
JOIN alert_types AS ats ON a.alert_type_id = ats.id
JOIN イベント 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 ステートメントで実行したいと考えています。