2017-04-10 1 views
0

Quelqu'un pourrait m'aider à comprendre la logique de cette requête (T-SQL dans SQL Server 2014) de manière simple?T-SQL en utilisant 2 paramètres et isNull

Select 
    c.ContractID 
From 
    dba.contract as c 
Inner Join 
    dba.Person as r on (c.ContractID = r.ContractID 
         and IsNull(isPrimary, 0) = 1) 

La partie que je ne comprends pas est le isNull(isPrimary, 0) = 1.

Qu'est-ce que cela signifie? Btw isPrimary est l'une des colonnes dba.person

Merci beaucoup!

+0

Cette fonction retourne le premier argument, si elle est non nulle, dans d'autres cas, vous aurez deuxième argument. –

+6

IsNull() ne sert à rien ici. pourrait être ... et isPrimary = 1 car null n'est pas égal à 1 –

+0

Il gère les valeurs NULL dans les comparaisons d'égalité. Il fait l'équivalent de et (isPrimary = 1 ou isPrimary IS NULL). –

Répondre

1
isNull(isPrimary, 0) = 1 

isNull est une fonction SQL qui est utilisée pour vérifier la variable null et extrait ci-dessus décrivent comme si la variable isPrimary est nulle remplacer cette valeur nulle à 0. Aux fins du présent procédé pour traiter exception de pointeur null.

+0

Merci beaucoup, c'est très utile! – Natalia

0

La fonction IS_NULL remplace uniquement la valeur isPrimary à 0, dans le cas où le isPrimary est égal à NULL.

Votre chèque est vrai que lorsque isPrimary est non nulle (parce que si elle est, il sera remplacé par 0) ET isPrimary = 1.

SELECT c.contractid 
FROM dba.contract AS c 
     INNER JOIN dba.person AS r ON (c.contractid = r.contractid AND isprimary = 1) 
WHERE isprimary IS NOT NULL 
+0

Si 'IsPrimary' est NULL, alors le code le remplacera par un' 0' (pas un '1' comme vous le mentionnez dans votre première phrase) –

+1

Désolé, mon mauvais! Merci, juste corrigé la réponse! –

+0

merci pour votre aide! est-il possible d'utiliser plus de 2 où des clauses pour le remplacer? – Natalia

0

Si vous voulez voir comment il fonctionne, vous pouvez create table dans votre base de données:

use [your_database_name]; 
create table dbo.test_table 
(
    t int null 
); 

insert into dbo.test_table 
values (0), (1), (2), (NULL); 

select t, isnull(t, 0) as function_result 
from dbo.test_table 
0

Exemple de script pour vous de comprendre IsNull (IsPrimary, 0) = 1 état donne le résultat et aide à la gestion des exceptions de pointeur nul.


DECLARE @table AS TABLE (Id int, isPrimary varchar(20)) 
INSERT INTO @table 
SELECT 1,1001 UNION ALL 
SELECT 2,1002 UNION ALL 
SELECT 3,NULL UNION ALL 
SELECT 4,1004 
SELECT Id,ISNULL(isPrimary,0) UIdnum FROM @table 

SELECT * FROM @table WHERE ISNULL(isPrimary,0)=1 

SELECT * FROM @table WHERE ISNULL(isPrimary,0)=0