2016-05-07 3 views
0

Я пытаюсь написать простой SQL-запрос, чтобы разрешить некоторые цены с какого-то более старого SQL Server 2000. Проблема в том, что у нас есть 6 разных цен, и я бы сделал так, чтобы я только нужно изменить одного смотрителя, чтобы это сделать.SQL, использующий переменную в where, где до этого равен

Я объявила переменную как символ вверху и попыталась вернуть эти символы в утверждение. Это рабочая половина, для части после равного. Код внизу внизу работает. Но мне нужно изменить «dbo.dep_art.VB05». 5 в VB05 должен равняться @ID. Поэтому, когда я изменяю @ID на 4, VB05 должен быть VB04. Я пробовал [email protected] и dbo.dep_art.VB0 & @ID, но это не сработало. Также попробовал вторую переменную как nvarchar и установил ее как dbo.dep_art.VB05, но это тоже пошло не так.

Пожалуйста, помните: это SQL Server 2000.

Declare @ID as char 
set @ID = 5 

/*.................*/ 

select distinct(dbo.dep_prs.ARTNR), 
    dbo.dep_art.Bezeichnung, 
    dbo.dep_prs.PR_Brutto 
from 
    dep_prs, dep_art 
where 
    dbo.dep_prs.ARTNR = dbo.dep_art.ARTNR 
    and dbo.dep_prs.Preisgruppe = 1 
    and dbo.dep_art.VB05 = 2 
    and dbo.dep_prs.LIdx = @ID 
    or dbo.dep_prs.ARTNR = dbo.dep_art.ARTNR 
    and dbo.dep_prs.Preisgruppe = 1 
    and dbo.dep_art.VB05 = 3 
    and dbo.dep_prs.LIdx = @ID 
order by 
    dbo.dep_prs.artnr 
+0

[Плохие привычки пинать: использование JOIN в старом стиле] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits- to-kick-using-old-style-joins.aspx) - этот стиль таблиц * в стиле старого стиля * был заменен на * правильно * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет ** назад) и его использование не рекомендуется –

+0

Также: Если вы определяете переменную как' char' * без *, определяя длину - тогда вы получаете переменную ** точно 1 символа ** длина - это то, что вам нужно/нужно? Если нет: используйте 'varchar (n)' для определения строковой переменной, длина которой может быть до символов 'n'! Кроме того: если вы определяете переменную как 'char', и вы хотите что-то присвоить ей, используйте ** одинарные кавычки ** для обозначения строкового значения:' set @ID = '5''. Без одинарных кавычек это значение ** integer **, и SQL Server должен будет сделать преобразование –

+0

Спасибо за ответ. Вредные привычки действительно используются только в качестве присоединения к левому соединению в каком-либо запросе, никогда не используют соединение в этом запросе. Я постараюсь улучшить. Что касается char, мне нужен только один символ (от 1 до 6). Также вредные привычки с того времени, что 640k было достаточно для всех. Я заметил одиночные кавычки. – Roman78

ответ

0

Если у вас есть только 6 вариантов, и он не будет развиваться дальше: вы можете использовать, если ... еще

Я надеваю 't предлагать использовать динамический sql в версии 2000

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