2009-02-24 7 views
11

je les suivantes:SQL Server Vérifiez IsNull et pour Zero

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

Si @VariableEqualToZero est nul, il remplace le 1. Je besoin de remplacer 1 si @VariableEqualToZero = 0 aussi bien. Comment puis-je faire cela?

Répondre

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

Vous utilisez CASE

au lieu de

ISNULL(@VariableEqualToZero,1) 

utilisation

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

COALESCE et ISNULL sont essentiellement seulement des raccourcis pour une instruction CASE. Vous pouvez consulter l'aide pour la syntaxe de CASE.

28

Si vous utilisez SQL Server, vous pouvez probablement utiliser une instruction nullif? (C.-à-définir la valeur null si elle est 0 rétablissez alors 1 si elle est nulle - devrait prendre pour les 0 et NULLs

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

+1 'NULLIF()' est le chemin à parcourir (et il est standard SQL trop , donc je serais tenté de remplacer 'ISNULL()' par 'COALESCE()' :) – onedaywhen