2016-08-19 62 views
0

我正在嘗試編寫一個SQL查詢來訪問數據庫中的某些信息,以便可以使用Selenium對網頁中的表單進行檢查。我遇到的問題是表單中的某些字段不需要填寫,並且它們在數據庫中顯示爲NULL。如果此值不爲NULL,則將其用作Person表中的主鍵,並訪問該人員的更多信息。有沒有什麼方法可以在值不爲空時訪問這些信息?這是什麼,我想現在使用的代碼段:訪問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 

的情況下條件在SQL拋出一個錯誤,但我相信,即使我得到的語法正確,試圖訪問QAPreparer.OrgName當Person在數據庫中顯示爲NULL時會拋出一個錯誤。

回答

1

您必須對空值使用特殊語法。而不是variable = null,您必須編寫variable IS NUll,並且您不能在case語句中放入聯接,但可以將一個case語句放入Join ....的On子句中,以便將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