SQL服务器udf不工作
问题描述:
我现在整天在一个相当简单的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
答
@Ticker char
似乎嫌疑。
如果你没有在参数定义中声明一个长度,它默认为char(1)
,所以很有可能你的传入代号被截断 - 因此没有匹配。
SELECT TOP (100) PERCENT TradeDate ... ORDER BY TradeDate DESC
在派生表中是毫无意义的,但不会影响结果。
感谢您的答复,但我仍然揪头发了:) – StatsViaCsh 2012-01-17 23:30:41
编译器也有100 pct的事情的方式,我删除了它,它放回去.. – StatsViaCsh 2012-01-17 23:33:09
那么你有固定的问题与'char' ?如果是的话,你是否也更改了参数定义? “tblDailyPricingAndVol.Symbol”的数据类型是什么?你打电话过得怎么样? – 2012-01-17 23:33:54