2012-04-04 2 views
1

Я работаю с SQL, и я не могу понять, что это для меня.Назначение локальной переменной из таблицы с использованием оператора объединения

У меня есть локальная переменная в моей хранимой процедуре, называемой @curType. У меня две таблицы: DTXR и DP. DP содержит столбцы type и programID. DTXR содержит столбцы programID и QEI. Хранимая процедура передается QEI, и мне нужно получить type из таблицы DP и назначить ее локальной переменной @curType.

Итак, я в настоящее время

select @curType = [Type] From DP d 
     Join DTXR x on d.ProgramId = x.ProgramID 
     where x.QEI = @p_QEI. 

@p_QEI переменная передается в хранимую процедуру.

Проблема, с которой я столкнулся, заключается в том, что это не похоже на @curType. Это работает, если я вручную установить идентификатор программы, как это:

select @curType = [Type] from DP Where DP.ProgramId = 120 

Но присоединиться заявление, кажется, установив @curType нулевое значение.

+0

Вы уверены, что существует только одна запись мин DP, которая соответствует записи на dtxr? Я считаю, что значение @curType будет первой записью, с которой он сталкивается, что не может быть записью, которую вы ожидаете. –

ответ

2

Собственно, это должно работать. Я хотел бы проверить, чтобы убедиться, что следующий даже возвращает вообще ничего (и если это произойдет, то, что это первый результат обратно?):

select [Type] From DP d 
    Join DTXR x on d.ProgramId = x.ProgramID 
    where dtxr.QEI = @p_QEI 

Это должно быть проблемой, так как here is a fiddle proving that a join does nothing different

+0

Это одна из первых вещей, которые я проверил, и я получаю именно то, что ожидаю. Данные есть. Оператор select работает. Но присваивание этой локальной переменной, похоже, не очень приятное. – CurtisHx

+1

@CurtisHx Я просто обновил свой ответ SQLFiddle, который доказывает, что он должен каким-то образом быть данными. Соединение не испортит настройку переменной .... –

+0

Вы правы. Это не так. Вернуться к доске для рисования. – CurtisHx

0

Я m не уверен, что ваш код должен работать из-за предложения WHERE. IMO линия:

where dtxr.QEI = @p_QEI 

должно выглядеть:

where x.QEI = @p_QEI 

Мой второй намек, пожалуйста, проверьте @p_QEI переменную, она содержит правильное значение?

+0

oops. Это будет опечатка. – CurtisHx

Смежные вопросы