2010-07-28 3 views
3

У меня проблема, когда переменная не получает задание 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

Можете ли вы опубликовать немного больше кода, например. где вы получаете доступ к переменной. Вы также уверены, что есть строка, когда вы включаете предложение where в свой второй оператор select? – Paddy

+0

имеет значение '@ contract_id', потому что вы используете его в предложении where. –

+0

Именно в этом случае предложение where не должно быть. Глупая ошибка. – themaninthesuitcase

ответ

4

Похоже, что ваш пункт WHERE может остановить остановку строки. Вы упомянули, что вы тестировали один и тот же SELECT без настройки переменной, но указанный вами код не включает этот WHERE - так что это не то же самое.

Протестируйте SELECT с помощью WHERE на месте с фиктивными значениями (вероятно, NULL) и просмотрите. Это просто похоже на то, что он не возвращает результат.

+0

Дерево для деревьев. Я был настолько занят поиском чего-то сложного, когда это была простая глупая ошибка. Убрано где и волшебство, работает отлично, как должно. – themaninthesuitcase

0

В инструкции выбора вы устанавливаете @contract_id, но затем также используете его в предложении where. Я бы подумал, что @contract_id будет null?