2009-02-24 15 views
11

Mam następujący:SQL Server Sprawdź IsNull i Zero

set @SomeVariable = @AnotherVariable/isnull(@VariableEqualToZero,1) - 1 

Jeśli @VariableEqualToZero jest null Zamiennik 1. muszę go zastąpić 1 jeśli @VariableEqualToZero = 0, jak również. Jak mam to zrobic?

Odpowiedz

9
SET @SomeVariable = @AnotherVariable/COALESCE(
     CASE 
      WHEN @VariableEqualToZero = 0 THEN 1 
      ELSE @VariableEqualToZero 
     END, 1) - 1 
2
set @SomeVariable = @AnotherVariable/
(case when isnull(@VariableEqualToZero, 0) = 0 then 1 else 
@VariableEqualToZero end) - 1 
2

użyć CASE

zamiast

ISNULL(@VariableEqualToZero,1) 

użycie

CASE WHEN @VariableEqualToZero IS NULL OR @VariableEqualToZero = 0 THEN 1 ELSE @VariableEqualToZero END 

COALESCE i ISNULL są zasadniczo tylko skróty do instrukcji CASE. Możesz zapoznać się z pomocą dla składni CASE.

28

Jeśli używasz programu SQL Server, prawdopodobnie możesz użyć instrukcji nullif? (Czyli ustawić wartość null, jeśli jest 0, a następnie ustawić go na 1, jeżeli jest to null - należy złapać za obie 0 i wartości null

SET @SomeVariable = @AnotherVariable/ISNULL(NULLIF(@VariableEqualToZero,0),1) - 1 
+0

+1 'NULLIF()' jest droga (i jest to standard SQL zbyt , więc miałbym ochotę zastąpić 'ISNULL()' 'COALESCE()' :) – onedaywhen