2012-01-17 62 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