2010-07-28 6 views
3

J'ai un problème où une variable n'est pas définie par une instruction select. Le select rejoint une variable de table @contracts (qui est utilisée pour contrôler une boucle), puis se joint aux tables de contrats et de lignes de contrat réelles.La variable n'est pas définie par select

ma sélection est:

select top 1 
     @contract_id = c.contract_id 
     , @account = ch.account 
     , @service = cl.service 
     , @model = cl.model 
     , @serial = cl.serial 
     , @contract = ch.contract 
    from 
     @contracts c 
     inner join contractline cl on c.contract_id = cl.contract_id 
     inner join contractheader ch on cl.contract = ch.contract 
    where 
     cl.contract_id = @contract_id 

Mais quand je fais un select @contract_id dire que je reçois un retour NULL, comme toutes mes variables.

J'ai fait un simple select * from @contracts c inner join contractline cl on c.contract_id = cl.contract_id inner join contractheader ch on cl.contract = ch.contract et cela renvoie exactement 1 ligne avec les valeurs dans tous les endroits corrects, pas de null dans les valeurs sélectionnées.

Qu'ai-je fait de mal?

+0

Pouvez-vous publier un peu plus de code, par ex. où vous accédez à la variable. Etes-vous également certain qu'il existe une ligne lorsque vous incluez la clause where dans votre deuxième instruction select? – Paddy

+0

'@ contract_id' a-t-il une valeur initiale, parce que vous l'utilisez dans la clause where. –

+0

C'est exactement ça, la clause where ne devrait pas être là. Erreur stupide. – themaninthesuitcase

Répondre

4

On dirait que votre clause WHERE pourrait empêcher la ligne de revenir. Vous avez mentionné que vous avez testé le même SELECT sans définir de variable, mais le code que vous avez indiqué n'inclut pas ce WHERE - donc ce n'est pas la même chose.

Testez votre SELECT avec le WHERE en place, avec des valeurs factices (probablement NULL) et révision. Cela sonne simplement comme ne pas retourner un résultat.

+0

Bois pour les arbres. J'étais tellement occupé à chercher quelque chose de complexe quand c'était une simple erreur stupide. Supprimé l'endroit et la magie, fonctionne parfaitement comme il se doit. – themaninthesuitcase

0

Vous définissez @contract_id dans l'instruction select, mais vous l'utilisez également dans la clause where. J'aurais pensé que @contract_id sera null?

Questions connexes