2012-02-23 28 views
5

,如果我有一個函數SQL是否重新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() 

我知道避免了功能更安全,但是出於測試目的,我希望能夠給鑽機的功能,而不會影響誰是依靠不同的日期其他人所做的測試返回一個硬編碼的結果在循環日期表中設置。我希望能夠在不影響其他人的情況下切換到不同的日期。

回答

相關問題