T-SQL使用2个参数和isNull

时间:2017-04-10 13:30:51

标签: sql-server tsql isnull

有人可以帮助我以简单的方式理解此查询的逻辑(SQL Server 2014中的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

这是什么意思?顺便说一句isPrimarydba.person

中的一列

非常感谢你!

4 个答案:

答案 0 :(得分:1)

isNull(isPrimary, 0) = 1 

isNull是SQL的一个函数,用于验证null变量 以上片段描述好像isPrimary变量为null然后将此null值替换为0.此方法的目的是处理空指针异常。

答案 1 :(得分:0)

如果IS_NULL等于isPrimary,则isPrimary函数仅将NULL的值替换为0。

只有在isPrimary不为空时才会进行检查(因为如果是,则会将其替换为0)并且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 

答案 2 :(得分:0)

如果您想观察它的工作原理,可以在数据库中创建表格:

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

答案 3 :(得分:0)

示例脚本供您了解IsNull(isPrimary,0)= 1条件给出 结果并帮助处理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