Sql 无法通过select设置变量

Sql 无法通过select设置变量,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我有一个问题,变量不是由select语句设置的 select连接一个表变量@contracts(用于控制循环),然后连接到实际的contract表和contract行表 我的选择是: select top 1 @contract_id = c.contract_id , @account = ch.account , @service = cl.service , @model = cl.model , @ser

我有一个问题,变量不是由select语句设置的

select连接一个表变量@contracts(用于控制循环),然后连接到实际的contract表和contract行表

我的选择是:

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
但是当我执行select@contract\u时,我会说我得到了一个
NULL
,所有变量也是如此

我做了一个简单的
select*from@contracts c internal join contractline cl on c.contract\u id=cl.contract\u id internal join contractheader ch on cl.contract=ch.contract
,它只返回一行值,所有位置都正确,所选值中没有空值


我做错了什么?

看起来您的
WHERE
子句可能阻止行返回。您提到您已经测试了相同的
SELECT
,但没有设置变量,但是您列出的代码不包括此
WHERE
-因此它不相同


测试您的
选择
,并使用虚拟值(可能是
NULL
)检查
的位置。听起来好像它没有返回结果。

您在select语句中设置了
@contract\u id
,但在where子句中也使用了它。我原以为
@contract\u id
将是
null

您可以发布更多的代码吗,例如,在您访问变量的位置。在第二个select语句中包含where子句时,您是否也确定有一行?
@contract\u id
是否有初始值,因为您在where子句中使用了它。正是这样,where子句不应该在那里。愚蠢的错误。以木换树。我忙着寻找一些复杂的东西,而这只是一个简单的愚蠢的错误。删除了where和magic,它可以完美地工作。