2016-08-19 2 views
0

데이터베이스의 특정 정보에 액세스하는 SQL 쿼리를 작성하려고하므로 Selenium을 사용하여 웹 페이지의 양식에 대해 검사 할 수 있습니다. 내가 겪어 본 문제는 양식의 특정 필드를 채울 필요가 없으며 데이터베이스에 NULL로 표시된다는 것입니다. 이 값이 NOT NULL이면 Person 테이블의 기본 키로 사용하고 그 사람에 대한 자세한 정보에 액세스합니다. 값이 NULL이 아닐 때 이러한 정보에만 액세스 할 수있는 방법이 있습니까? 이것은 내가 지금 사용하는 노력하고있어의 조각입니다 : 케이스 조건은 SQL에서 오류를 던지고있다,하지만 난 QAPreparer.OrgName 액세스를 시도, 올바른 구문을 가지고 경우에도 있다고 생각사용할 수있는 특정 값에 따라 T-SQL의 특정 값에 액세스

SELECT QAPreparer.OrgName as [Client] FROM Folder 
    CASE WHEN @Preparer=NULL 
     THEN left join Person QAPreparer ON dbo.ufGetPrsnPk(dbo.ufgetPrsnName(Folder.PreparerPrsn)) = QAPreparer.PrsnPk 
     ELSE --do nothing 
    END 

사람이 데이터베이스에 NULL로 나타날 때 오류가 발생합니다.

답변

1

Null 값에 특수 구문을 사용해야합니다. variable = null 대신 variable IS NUll을 작성해야하며 case 문 안에 조인을 넣을 수는 없지만 Join 절의 On 절 내에 case 문을 넣을 수 있습니다. 따라서 yor SQL 쿼리는 다음과 같이 다시 작성되어야합니다.

SELECT qp.OrgName as [Client] 
    From Folder f 
    left join Person qp 
     ON qp.PrsnPk = 
      CASE WHEN @Preparer Is NULL 
       Then dbo.ufGetPrsnPk(dbo.ufgetPrsnName(f.PreparerPrsn)) 
       else null end 
0

당신은 다른 조건이있는 경우 사용할 수 있습니다 .. 아래 같은 ..

IF ISNULL(@Preparer,'')='' 
BEGIN 
SELECT QAPreparer.OrgName as [Client] 
FROM Folder 
    LEFT JOIN Person QAPreparer 
     ON dbo.ufGetPrsnPk(dbo.ufgetPrsnName(Folder.PreparerPrsn)) = QAPreparer.PrsnPk 
END 
ELSE 
BEGIN 
    SELECT QAPreparer.OrgName as [Client] FROM Folder 
END 
관련 문제