2010-07-28 132 views
3

我有一个问题,一个变量没有被select语句设置。变量没有通过选择设置

select连接一个表变量@contracts(用于控制一个循环),然后加入到真正的合同和合同线表中。

我的选择是:

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 

但是当我做了选择@contract_id说,我得到一个NULL回来,因为我做的所有变量。

我已经完成了一个简单的select * from @contracts c inner join contractline cl on c.contract_id = cl.contract_id inner join contractheader ch on cl.contract = ch.contract,并且它在所有正确的位置返回完全1行的值,在选定值中没有空值。

我做错了什么?

+0

您可以发布多一点的代码,例如你访问变量的地方。您是否确定在第二条SELECT语句中包含where子句时有一行? – Paddy 2010-07-28 08:31:55

+0

'@ contract_id'是否具有初始值,因为您在where子句中使用它.. – 2010-07-28 08:32:59

+0

就是这样,where子句不应该在那里。愚蠢的错误。 – themaninthesuitcase 2010-07-28 08:36:43

回答

4

看起来像你的WHERE子句可能会阻止行返回。你提到你已经测试了相同的SELECT没有设置变量,但你列出的代码不包括这个WHERE - 所以它不一样。

测试您的SELECTWHERE到位,虚拟值(可能NULL)和审查。它听起来像它没有返回结果。

+0

木材为树木。当这是一个简单的愚蠢错误时,我忙于寻找复杂的东西。 删除了地方和魔法,完美地运作,因为它应该。 – themaninthesuitcase 2010-07-28 08:36:22

0

您在select语句中设置了@contract_id,但在where子句中也使用了它。我会认为@contract_id将是null