2013-09-25 6 views
1

У меня есть 3 таблицы, из которых мне нужно извлечь данные, эти данные зависят от результатов из других таблиц, поэтому я пытаюсь использовать структуру if if else, и я получаю синтаксические ошибки. Я могу быть над головой, насколько это имеет опыт SQL. Я генерирую синтаксическую ошибку рядом с первой, если и впоследствии рядом с каждым. Является ли это простой синтаксической ошибкой, или я пытаюсь сделать что-то, что MS SQL 2000 неспособно обрабатывать?Если синтаксис Then Else в MS SQL Server 2000

Благодарим вас за ввод.

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
Go 
Begin 
Declare @vCasinoName varchar(35) 
select @vCasinoName = Description from Gen_Casino 
Create Table #AG_Report 
(Slotnumber int, 
SRID varchar(30), 
SerialNumber varchar(15), 
CAsset varchar(30), 
Mfr varchar(15), 
Denomination numeric(12, 2), 
Description varchar(30), 
Par real, 
EPROMID varchar(15), 
EPROMID2 varchar(15), 
EPROMIDXL varchar(30), 
Jurisdiction varchar(30), 
Bios varchar(30), 
BootChip varchar(30), 
VersionChip varchar(30), 
CasinoName varchar(35), 
) 
insert into #AG_Report 
select s.SlotNumber, 
    s.SerialNumber, 
    m.Manufacturer, 
s.Denomination, 
s.Description, 
s.Par, 
s.EPROMID, 
s.EPROMID2, 
if (CF.FieldID = 6) 
     BEGIN 
     CF.Value as SRID, 
     END 
      else if (CF.FieldID = 7) 
      BEGIN 
      CF.Value as CAsset, 
      END 
       else if (CF.FieldID = 9) 
       BEGIN 
       else if (CF.FieldID = 9) 
       BEGIN 
       CF.value as EPROMIDXL, 
        else if (CF.FieldID = 13) 
        BEGIN 
        CF.Value as Jurisdiction, 
        END 
         else if (CF.FieldID = 11) 
         BEGIN 
         CF.Value as Bios, 
         END 
          else if (CF.FieldID = 12) 
          BEGIN 
          CF.Value as BootChip, 
          END 
           else if (CF.FieldID = 14) 
           BEGIN 
           CF.Value as VersionChip, 
           END 
from CDS_Slotmast S, BB_SlotMastCustomField CF,BB_Mfr M, 
where S.SlotMast_id = CF.SlotMast_ID 
and CF.Revision = S.Revision 
and S.Active = "Y" 
order by s.Denomination, s,SlotNumber 
Select * from #AG_Report 
End 
+0

Существует 'IF' _statement_ и' CASE' _expression_. Посмотрите на 'CASE'. – HABO

+1

Как вы думаете, что должна делать логика IF? При вставке псевдоним выбранных полей не имеет значения, и это все, что вы меняете, поскольку это все поле «CF.Value». –

ответ

0

Чтобы уточнить, что сказал @HABO, а если это в пределах оператора выбора:

if (CF.FieldID = 6) 
     BEGIN 
     CF.Value as SRID, 
     END 
      else if (CF.FieldID = 7) 

Попробуйте это:

CASE 
    WHEN (CF.FieldID = 6) THEN 'SRID' --You can return a value from a field or have another case statement here if you need to. 
    WHEN (CF.FieldID = 7) 
    ...Continue your code 
    ELSE 
    ...If you want an ELSE  
    END --End the case statement 
+1

Комментарий 'Goat CO' также действителен. Вся логика бессмысленна при использовании 'INSERT'. –

+0

Я думаю, что они были просто полностью потеряны и не знали, что они пишут ;-) Я немного изменил свой код, чтобы не устанавливать значение в 'then', но возвращать строку (в качестве примера). – Steve

0

Использование IF внутри ЗЕЬЕСТ не представляется возможным в SQL Server. Вместо этого вы можете использовать оператор CASE. Вы также можете использовать вложенный корпус, в случае внутри WHEN

0

Оператор case - это правильный подход к IF внутри выбора, но, как видно из вашего утверждения, независимо от значения CF.FieldID вы всегда возвращаетесь CF.Value, но пытается вернуть другой псевдоним для столбца. Вы не можете этого сделать - псевдоним столбца должен быть одинаковым для каждой строки в наборе результатов. Но с точки зрения возврата данных вы можете просто включить CF.FieldID и CF.Value в результирующий набор, а затем дать код приложения выполнить эту работу.

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