2012-03-04 22 views
0

這個語法有什麼問題?SQL大小寫語法錯誤

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'

回答

2

這是因爲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分成兩個參數/變量 - 一個名稱中包含「name」,並且繼續爲(varchar?),另一個爲明確int並且單獨使用爲GroupID比較。