2012-01-17 66 views
1

我現在整天在一個相當簡單的udf。在下面。當我將select語句粘貼到查詢中時,它按預期運行......當我執行整個函數時,每次都得到「0」。正如你所知道的那樣,沒有很多的調試選項,所以在執行時很難看到設置的值是什麼。它的基本目的是確保股票數據存在於每日定價表中。因此,我可以通過查看多少天的數據,股票代碼和最近交易日期來檢查。一個子查詢爲我提供了正確的交易日期,並且我使用「IN」從定價和vol表中提取數據...如果返回的數量少於我檢查的天數,那就沒有用。如果是這樣,我們就開始做生意了。任何幫助將是巨大的,我是在這一點上撐船對於新手:SQL服務器udf不工作

ALTER FUNCTION dbo.PricingVolDataAvailableToDateProvided 
    (@Ticker char, 
    @StartDate DATE, 
    @NumberOfDaysBack int) 
    RETURNS bit 
AS 
    BEGIN 

    DECLARE @Result bit 
    DECLARE @RecordCount int 

SET @RecordCount = (
    SELECT COUNT(TradeDate) AS Expr1 
    FROM (SELECT TOP (100) PERCENT TradeDate 
      FROM tblDailyPricingAndVol 
      WHERE (Symbol = @Ticker) 
        AND (TradeDate IN (SELECT TOP (@NumberOfDaysBack) 
             CAST(TradingDate AS DATE) AS Expr1 
             FROM tblTradingDays 
             WHERE (TradingDate <= @StartDate) 
             ORDER BY TradingDate DESC)) 
      ORDER BY TradeDate DESC) AS TempTable) 

    IF @RecordCount = @NumberOfDaysBack 
     SET @Result = 1 
    ELSE 
     SET @Result = 0 

    RETURN @Result 

    END 

回答

1

@Ticker char似乎嫌疑。

如果你沒有在參數定義中聲明一個長度,它默認爲char(1),所以很有可能你的傳入代號被截斷 - 因此沒有匹配。

SELECT TOP (100) PERCENT TradeDate ... ORDER BY TradeDate DESC 

在派生表中是毫無意義的,但不會影響結果。

+0

感謝您的答覆,但我仍然揪頭髮了:) – StatsViaCsh 2012-01-17 23:30:41

+0

編譯器也有100 pct的事情的方式,我刪除了它,它放回去.. – StatsViaCsh 2012-01-17 23:33:09

+0

那麼你有固定的問題與'char' ?如果是的話,你是否也更改了參數定義? 「tblDailyPricingAndVol.Symbol」的數據類型是什麼?你打電話過得怎麼樣? – 2012-01-17 23:33:54