2012-02-23 8 views
5

को बदलने अगर मैं एक समारोहएसक्यूएल फिर से evalulate समारोह हर पंक्ति के लिए या सिर्फ एक बार, यह एक निरंतर

ALTER FUNCTION [dbo].[GetCycleDate] 
(
) 
RETURNS DATE 
AS 
    BEGIN 
     DECLARE @CYC_DT DATE 

     SELECT 
      @CYC_DT = CYC_DT 
     FROM 
      CYC_DT 
     WHERE 
      CURR_CYC_IND = 'C' 

     RETURN @CYC_DT 

END 

एक बहुत बड़ी मेज के लिए है इन दो SQLs लगभग एक ही प्रदर्शन करेंगे करता है?

SELECT 
    * 
FROM 
    [dbo].Table S 
    INNER JOIN dbo.CYC_DT D ON 
     S.GL_DT = D.CYC_DT AND 
     D.CURR_CYC_IND = 'C' 


SELECT 
    * 
FROM 
    [dbo].Table S 
WHERE 

    S.GL_DT = dbo.GetCycleDate() 

मैं परहेज समारोह सुरक्षित है पता है, लेकिन परीक्षण प्रयोजनों के लिए, मैं समारोह रिग करने में सक्षम परीक्षण अन्य लोगों को जो एक अलग तिथि पर निर्भर कर रहे हैं के द्वारा किया प्रभावित किए बिना एक हार्ड कोडित परिणाम वापस जाने के लिए होना चाहता हूँ साइकिल दिनांक तालिका में सेट करने के लिए। मैं किसी और को प्रभावित किए बिना किसी अलग तारीख पर स्विच करने में सक्षम होना चाहता हूं।

उत्तर

2

आम तौर पर एक बुरा विचार यह करने के लिए, के रूप में अनुकूलक क्या यह तुम्हारे लिए क्या कर सकते हैं जब अदिश UDFs शामिल कर रहे हैं .:

http://blogs.msdn.com/b/dfurman/archive/2009/12/02/query-performance-scalar-udfs-and-predicate-pushdown.aspx

http://www.sql-server-performance.com/2005/sql-server-udfs/

अपने अदिश यूडीएफ के बाद से में अधिक सीमित है पैरामीटर नहीं किया गया है, और आपकी नमूना क्वेरी सरल है, आप इससे दूर हो सकते हैं, लेकिन आपको यह सुनिश्चित करने के लिए परीक्षण करना होगा।

संबंधित मुद्दे