2011-11-01 3 views
1

J'ai une procédure stockée qui extrait des données pour un rapport. J'ai un problème avec les paramètres. J'ai quelques tables temporaires et quelques jointures qui fonctionnent donc je les ai omis ci-dessous. Le problème est cette ligne:Paramètres dans SQL Server 2008

WHERE 
SeminarDivision = @SeminarDivision AND SeminarType = @SeminarType 

Quand je mets cette clause where pour utiliser mon séminaire paramètres retourne la procédure stockée rien mais je dois générer un rapport basé sur ces deux paramètres. Alors, où vont les paramètres? Quelqu'un peut-il aider?

@StartDate DateTime, 
@EndDate DateTime, 
@SeminarDivision VARCHAR(50), 
@SeminarType VARCHAR(50) 
) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

     ... OMITTED  
SELECT 
    WL.PID, 
    CONVERT(varchar(20), upper(substring(FirstName,1,1))+ 
     LOWER(substring(FirstName,2,19))) AS FirstName, 
    CONVERT(varchar(20), upper(substring(LastName,1,1))+ 
     LOWER(substring(LastName,2,19))) AS LastName, 
    S.SeminarDivision, 
    S.SeminarType, 
    S.StartDate, 
    S.SeminarLocation 
FROM 
    @tblWaitList WL 
    INNER JOIN @tblSeminar S ON WL.SeminarGuid=S.SeminarGuid 
WHERE 
    SeminarDivision = @SeminarDivision AND SeminarType = @SeminarType 
ORDER BY 
    LastName,FirstName,StartDate 
+1

Je ne vois rien de mal ici. Comment appelez-vous la procédure? –

+0

WOW! Je suis désolé les gars, j'avais la valeur par défaut dans SSRS mis à un nom invalide. Erreur stupide. Merci d'avoir regardé mon problème. Vous tous au moins laissez-moi savoir que ma syntaxe était correcte et je n'étais pas sûr à ce sujet. – 2boolORNOT2bool

Répondre

1

d'abord et avant tout il n'y a rien de mal à votre code, lorsque vous demandez d'où viennent ces paramètres vont, ils vont exactement où vous les mettez. La question est: est-ce que les données qui arrivent pour SeminarDivision et SeminarType sont le bon type de données? Par exemple, juste comme un test, copier le code dans une nouvelle requête de code SQL dans l'éditeur. Lancez la commande sans l'où, si vous obtenez des valeurs géniales. Maintenant, changez l'endroit où

WHERE SeminarDivision = "Possible_Value"

Où Possible_Value doit être une valeur possible ... Si elle renvoie des lignes, bon ... maintenant ajouter la deuxième condition également hardcoding une valeur:

WHERE SeminarDivision = "Possble_Value" AND SeminarType="Possible_Value_2"

Obtenir des données? Est-il possible que vous voulez OR plutôt que AND?

+0

Oui, j'ai besoin des deux conditions pour que j'utilise l'opérateur AND et oui si la clause where est supprimée, j'obtiens toutes les données dont j'ai besoin, mais toutes les divisions et tous les types. Si je code dur le paramètre, cela me donnera n'importe quelle corde. Je suis perplexe! – 2boolORNOT2bool

+0

Je suppose que je ne comprends pas ce que vous voulez dire. Juste un code dur une condition, quel est le résultat d'une seule condition? Publiez des exemples de données, cela nous aide, nous ne faisons pas attention aux lecteurs. – JonH

+0

Vous aviez raison de dire que la condition n'était simplement pas remplie parce que j'avais une valeur par défaut dans SSRS et ce n'était pas correct. C'était simplement "erreur d'utilisateur" mais vous m'avez fait savoir que ma syntaxe était correcte, donc je vous ai vérifié pour m'aider.Merci! – 2boolORNOT2bool

1

Il n'y a rien de mal avec la 'localisation' de vos paramètres.

Si vous ne récupérez aucune donnée, c'est soit parce que vous n'avez pas renseigné @tblWaiList ou @tblSeminar, soit parce que les enregistrements ne correspondent tout simplement pas à votre clause WHERE.

Vérifiez votre params ont la valeur que vous pensez qu'ils le font en exécutant print @SeminarDivision etc.

SELECT * FROM @tblSeminar peut vous donner un indice aussi.

1

Vous ne définissez pas correctement les paramètres de l'appel.

Essayez ceci dans SSMS, les valeurs de changement en conséquence

EXEC Proc '20110101', '20111101', 'PossibleDivision', 'PossibleType' 

Si cela échoue, nous montrent « OMISE » Code

si cela fonctionne, nous montrer comment vous appelez cela du code client