我想通過一個網站實現我們的數據庫的搜索功能。數據庫有一個主表和五個表,這些表都是外鍵的主表(詳細表)。詳細信息表保存掛鉤到應用程序中的查找表的可以爲空的整數值。我想允許用戶從查找表中選擇任何/所有值並將其作爲逗號分隔的字符串傳遞給存儲過程。我遇到的問題與記錄具有NULL值時有關,因爲它返回UNKNOWN,所以我沒有收到任何行。SQL:動態哪裏子句使用IN語句死於NULL值的記錄
這裏是什麼,我想在where子句中的例子:
僞
Input Variable
@StateIDs VARCHAR(MAX)
@StateIDs = '1, 2, 3' //I have a split function to split this up
//@StateIDs could have zero or all 50 states in it so this needs to work with either
WHERE
State.StateID IN (udf_SplitAndCoalesce(@StateIDs, State.StateID, ','))
//udf_SplitAndCoalesce is used to split up the csv input parameter and if that is null to return the current value in the record in the table
This works unless @StateIDs = NULL the where clause becomes
WHERE State.StateID IN (State.StateID)
這是很好的,除非State.StateID = NULL則變得
WHERE State.StateID IN (NULL)
這將返回UNKNOWN(無行)
如果csv列表中的@StateIDs
爲空,那麼我真的不希望Where子句的那部分存在,但我不知道有條件地排除或包含整個語句的方式。最大的問題是大概有二十個不同的輸入是可能的,所以我不能只寫一個@StateIDs
不爲空的兩個不同的選擇語句,而當它是一個時,它不是一個。
我最終試圖創建一個動態where子句,而不使用sp_executesql
作爲字符串執行語句。
我一直在爲此工作了幾天,並創建了一堆不同的解決方案,但每個都不是我所需要的,它涉及到處理NULL。
任何幫助的人可以給我將不勝感激。