2016-07-26 4 views
1

나는 열이있는 테이블이라고 샘플을 가지고변수에 isnull을 적용하는 방법은 무엇입니까?

Id, Name, Dept, active 

검색어 :

내가 누구의 활성화 deptment 이름을 전달하여 샘플 테이블 이름과 ID를 가져 오기 할
select Id 
from Sample 
where Dept = @Dept and active = 1 

. 상황에 따라 2 개의 레코드를 얻을 수 있습니다. 두 부서가 활성화되었을 수 있습니다. 그것이 내가 1 위를 차지하는 이유입니다. 어떤 때는 기록이 남지 않을 수도 있습니다. 내가 저장 프로 시저에서 다음과 같이 사용하는 이유

:

declare @TempId int  

set top 1 @TempId = Id 
from Sample 
where Dept = @Dept and active = 1 

if(@TempId is null) 
begin 
    @TempId = 0 
end 

내가 위에서 isnull를 사용할 수 대신 후있는 선택은 모두 내 조건에 적합?

+0

힌트 :'declare @TempId int = 0' –

답변

-1

레코드 선택시 NULL 값을 확인하고 NOT NULL 레코드를 선택하십시오. 부서 = @dept 활성 = 1 이드

+0

이것은 완전히 잘못되었습니다. OP가 말했듯이, 때로는 결과가 반환되지 않고, 일부는 null을 포함하지 않습니다. – CompanyDroneFromSector7G

2

호 먼저이 select하지 set 있어야 널이 아닌 곳

선언은
샘플로부터 상위 1 @TempId = ID를 선택 int로 @TempId. 그리고 select이 행을 반환하지 않으면 @TempId는 변경되지 않습니다. 내가 다음 코드를 작성합니다이 간단한 예제

declare @TempId int = 0; 
select @TempId = null where 1=2; 
select @TempId; 
0

참조 : 행이 반환되지 않으면

DECLARE @TempId int = 
    COALESCE((SELECT TOP 1 Id FROM [Sample] WHERE Dept = @dept AND Active=1), 0) 

, NULL 병합 기능을 사용한다.