2017-04-10 8 views
0

簡単な方法でこのクエリのロジック(SQL Server 2014のT-SQL)を理解できる人に助けてくれますか?2つのパラメータとisNullを使用するT-SQL

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

私が理解していない部分は、isNull(isPrimary, 0) = 1です。

これはどういう意味ですか? Btw isPrimaryは、dba.personの中の1つです

ありがとうございました!

+0

この関数は最初の引数を返し、その他の場合には、あなたは二番目の引数を持つことになります。 –

+6

IsNull()は目的を果たさない。 NULLが1と等しくないため、isPrimary = 1となる可能性があります。 –

+0

等価比較でNULL値を処理しています。 andは(isPrimary = 1またはisPrimary IS NULL)に相当します。 –

答えて

1
isNull(isPrimary, 0) = 1 

のisNullはヌル変数 を検証するために使用され、isPrimary変数がnullの場合、0でヌルポインタ例外を処理するために、この方法の目的は、このヌル値を置き換えるように上述スニペットSQLの関数です。 isPrimaryNULLに等しい場合に

+0

ありがとう、これはとても役に立ちます! – Natalia

0

IS_NULL関数は、isPrimary 0の値を置き換えています。

あなたのチェックが

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

'IsPrimary'がNULLの場合、コードはそれを' 0'(最初の文で言及したように '1'ではなく)で置換します。 –

+1

申し訳ありません、悪い!ありがとう、ちょうど答えを修正しました! –

+0

ご協力いただきありがとうございます!それを置き換えるのに2つ以上のwhere節を使用することは可能ですか? – Natalia

0

あなたはそれがどのように動作するか見たい場合は、あなたができるisPrimaryがnullでない場合(それがある場合、それは0で置き換えられますので)のみtrueで、isPrimary = 1あなたのデータベースにテーブルを作成します。

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

サンプルスクリプトを使用すると、= 1つの条件が 結果を与えると、nullポインタ例外を処理するのに役立ちますのIsNull(0 isPrimaryを)理解します。それがnullでない場合


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 
関連する問題