2015-05-20 3 views
0

Я пытаюсь выяснить эту хранимую процедуру.SQL Server Если Null Return Everything

ALTER procedure [dbo].[GetTotals] 

@Service nvarchar(50), 
@Country nvarchar(50) = NULL, 
@Region nvarchar(50) = NULL 

as 

SELECT 
    CASE @Service 
    WHEN 'Army' THEN Sum(Army) 
    WHEN 'Navy' THEN Sum(Navy) 
    When 'Marine_Corps' then Sum(Marine_Corps) 
    When 'Air_Force' then Sum(Air_Force) 
    ELSE NULL 
    END  as "ServiceTotal" 

FROM 
    All_Records 

WHERE Country = CASE WHEN @Country IS NOT NULL THEN @Country ELSE Country END 
    AND Region = CASE WHEN @Region IS NOT NULL THEN @Region ELSE Region END 

То, что я хочу, если @Country не равно нулю, то возвращать записи where Country = @Country, остальное возвращает все страны. Я хочу такое же поведение для Region.

Я попытался Else Is Not Null, а остальное! = Null, а остальное <> Null

Но ничего не работает.

Редактировать:

Я понял. Я просто неправильно вызывал процедуру. Это работает. Я должен назвать процедуру, названную GetTotals следующим образом:

  • GetTotals Navy, Null, Europe Это вернет полный флот для всей Европы.
  • GetTotals Navy, Албания, Null Это вернет суммы для военно-морского флота в Албании

ответ

3

Это часто делается так:

WHERE COALESCE(@Country,Country) = Country AND COALESCE(@Region,Region) = Region 
+1

Также в SQL Server 'ISNULL()' является альтернативой;). –

1
WHERE (Country = @Country OR @Country IS NULL) AND (Region = @Region OR @Region IS NULL) 
+0

Спасибо Габриэля. Это тоже работает! –

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