2012-01-17 4 views
1

Je suis maintenant toute la journée sur un UDF assez simple. C'est ci-dessous. Lorsque je colle l'instruction select dans une requête, elle fonctionne comme prévu ... lorsque j'exécute la fonction entière, j'obtiens "0" à chaque fois. Comme vous le savez, il n'y a pas beaucoup d'options de débogage, il est donc difficile de voir quelle valeur est/n'est pas définie lors de l'exécution. Le but de base est de s'assurer que les données de stock existent dans un tableau de prix quotidien. Donc, je peux vérifier par combien de jours les données que je vérifie, le ticker, et la dernière date de négociation à vérifier. Une sous-requête m'obtient les bonnes dates de trading, et j'utilise "IN" pour extraire des données de la table des prix et du vol ... si le compte de ce qui revient est inférieur au nombre de jours que je vérifie, pas bon. Si c'est le cas, nous sommes en affaires. Toute aide serait génial, je suis un newb qui barques à fond plat à ce moment:SQL serveur udf ne fonctionne pas

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 

Répondre

1

@Ticker char semble suspect.

Si vous ne déclarez pas de longueur dans la définition de paramètre, la valeur par défaut est char(1). Il est donc fort probable que vos tickers passés soient en train d'être tronqués en silence, donc pas de correspondance.

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

dans la table dérivée est inutile mais n'affectera pas le résultat.

+0

Merci pour la réponse, mais je suis toujours tirer les cheveux :) – StatsViaCsh

+0

Le compilateur a fait cette chose de 100 PCT, au fait, je l'ai supprimé, il le remet en place .. – StatsViaCsh

+0

Eh bien, avez-vous résolu le problème avec 'char' ? Si oui, qu'avez-vous changé la définition du paramètre? Quel est le type de données de 'tblDailyPricingAndVol.Symbol'? Comment l'appelez-vous? –