3

次のクエリがあります

    
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 ステートメントで実行したいと考えています。

4

4 に答える 4

3

udf_get_event_sitelist の結果をテーブル変数に選択し、@@rowcount > 0 の場合にのみ大きなクエリを続行できます。

于 2009-03-13T11:53:28.970 に答える