2011-05-05 4 views
0

MS SQL Server 2008 R2에서 데이터베이스보기를 만들고 있습니다. 'Status'라는 출력 열 중 하나는 여러 다른 테이블에서 엔티티에 대한 정보를 가져와 사용자에게보고되는 문자열 상태를 생성합니다.열이 null인지 여부 (부울 값)

따라서 유일한 매개 변수로 엔터티 ID를 사용하고 nvarchar (MAX) 상태를 반환하는 함수를 만듭니다.

첫 번째 확인은 엔티티가 승인되었는지 여부입니다. 이것은 데이터베이스를 승인 한 사람의 사용자 이름으로 데이터베이스에 저장됩니다. 승인되지 않은 경우 값은 NULL입니다.

그래서, 의사 코드는 내가하고 싶은 것은이 때문이다 :

if entity is NOT approved 
    return "Pending" 
else 
begin 
    max = select MAX(value) from EntityStatus // several statuses may exist 
    status = select name from EntityStatus WHERE value = max 
    return status 
end 

내 즉각적인 문제는 : 나는 '승인'부울을 선택하려면 어떻게합니까?

나는 T-SQL 프로그래밍에 익숙하다. (아마 보여줄 것이다.) 그래서 내 기능을 향상시킬 수있는 다른 방법을 제안하라.

당신은 주문에 의해 명시 적으로 열없이 오름차순으로 EntityStatus.Value에 의존하는 경우
+0

시도 난 당신이 하나 필요하다고 제안 할 수 있습니다? 언젠가 시스템은 다른 상태 사이에 삽입하려는 상태가 필요할 것이고, 이는 처리하기가 매우 어려울 수 있습니다. – ErikE

답변

1
if (select approver_username from approvals where entityid = @entityid) is null 
    return 'Pending' 
else 
begin 
    ... 
end 
+0

예상대로 작동합니다. 감사합니다 – anorm

+0

쿼리가 여러 행을 반환 할 수 있으면 IF 문이 실패합니다. 또한 순수한 문체 선호도 관점에서, 나는 주어진 존재에 대해 IF 존재 (SELECT 1 FROM ... WHERE approver_username IS NULL)를 선호 할 것이다. – ErikE

0

select city,isnull(city,'pending/unknown')city2 from authors