2012-02-20 92 views
-1

我在SQL Server 2005中有一個存儲過程,用於根據從UI傳遞的參數檢索值。搜索操作的存儲過程

這基本上是一個名字與JOIN許多表的搜索操作。我的問題是,當用戶不提供中間名時,我的過程無法訪問該值。

P.FirstName = Coalesce(@FirstName,P.FirstName) AND 
    P.MiddleName = Coalesce(@MiddleName,P.MiddleName) AND 
    P.LastName = Coalesce(@LastName,P.LastName) AND 
    (
     P.FirstName = Coalesce(@anyName,P.FirstName) OR 
    P.MiddleName = Coalesce(@anyName,P.MiddleName) OR 
    P.LastName = Coalesce(@anyName,P.LastName) 
    ) 

我無法刪除中間名,因爲我在上述所有列上都提供了過濾選項。

+1

[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html) - 我猜Middlename是空的, = NULL'陷阱。 – 2012-02-20 11:47:01

回答

0

嘗試這樣的事情

CASE WHEN @FirstName IS NULL THEN CASE WHEN P.FirstName is NULL THEN 1 ELSE 0 END 
    ELSE CASE WHEN P.FirstName = Coalesce(@FirstName,P.FirstName) THEN 1 ELSE 0 END 
     END = 1 
0

改成這樣:

(P.MiddleName = @MiddleName or P.MiddleName is null or @MiddleName is null) 

下面是完整的例子:

(P.FirstName = @FirstName or P.FirstName is null or @FirstName is null) AND 
(P.MiddleName = @MiddleName or P.MiddleName is null or @MiddleName is null) AND  
(P.LastName = @LastName or P.LastName is null or @LastName is null) AND  
( @AnyName is null or 
    P.FirstName = @AnyName or 
    P.MiddleName = @AnyName or  
    P.LastName = @AnyName) 
+0

按照您的建議製作後,我的過濾器選項不能正常運行。 – LovingMVC 2012-02-20 12:07:51

0
where (MiddleName = Coalesce(@MiddleName ,MiddleName) or MiddleName is null) 

不要忘記上做兩個地點你參考MiddleName