Ошибка синтаксиса регистра SQL - PullRequest
0 голосов
/ 04 марта 2012

Что не так с этим синтаксисом?

Declare @comparisongroup int;
...
Insert Into @universitytemp Case @comparisongroup
    When -1 Then Select * From dbo.University;
    When -2 Then Select * From dbo.University Where SubDivisionName = @group; 
    When -3 Then Select * From dbo.University Where ConferenceName = @group; 
    Else Select * From dbo.GroupUniversity Where GroupID = CONVERT(int, @group);
End;

Это тоже не работает

Declare @comparisongroup int;
...
Case @comparisongroup
    When -1 Then Insert Into @universitytemp Select * From dbo.University
    When -2 Then Insert Into @universitytemp Select * From dbo.University Where SubDivisionName = @group 
    When -3 Then Insert Into @universitytemp Select * From dbo.University Where ConferenceName = @group 
    Else Insert Into @universitytemp Select * From dbo.GroupUniversity Where GroupID = CONVERT(int, @group)
End;

Также не работает:

Declare @comparisongroup int;
...
Case
    When @comparisongroup = -1 Then Insert Into @universitytemp Select * From dbo.University;
    When @comparisongroup = -2 Then Insert Into @universitytemp Select * From dbo.University Where SubDivisionName = @group
    When @comparisongroup = -3 Then Insert Into @universitytemp Select * From dbo.University Where ConferenceName = @group 
    Else Insert Into @universitytemp Select * From dbo.GroupUniversity Where GroupID = CONVERT(int, @group)
End;

Я получаю ошибкиизречение Incorrect syntax near the keyword 'When', 'Else', and 'End'

1 Ответ

2 голосов
/ 04 марта 2012

Это потому, что CASE является выражением , которое возвращает значение . Единственное значение. Не набор результатов.

Вы можете попробовать:

SELECT
    * --todo - explicit column list
FROM
   dbo.University u
WHERE
   @comparisongroup = -1 OR
   (@comparisongroup = -2 AND SubDivisionName = @Group) OR
   (@comparisongroup = -3 AND ConferenceName = @Group)
UNION ALL
SELECT
    * --todo - explicit column list
FROM
    dbo.GroupUniversity
WHERE GroupID = CONVERT(int, @group) AND NOT @ComparisonGroup in (-1,-2,-3);

т.е. не использовать CASE выражение вообще. В качестве стилистической точки зрения, я бы, вероятно, также разделил @group на два параметра / переменных - один из которых имеет «имя» в своем имени и по-прежнему (varchar?), А другой - явно an int и используется исключительно для сравнения GroupID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...