2013-04-23 60 views
-1

我想根據名稱,企業​​名稱,大學名稱,技能名稱搜索表。如何在SQL Server 2008中基於名稱,企業​​名稱,大學名稱編寫搜索存儲過程

假設我將按名稱搜索一次,另一次按商號名稱搜索,另一次是大學名稱,但是當我輸入名稱時,單擊搜索按鈕我將顯示正確。但是,當我輸入businessname或universityname我得不到正確的,我會像businessname列所有都是空的像null。

我寫了一個存儲過程是這樣的:

ALTER PROCEDURE [dbo].[SearchPeople_test] 
(
     @FirstName nvarchar(255), 
     @Location nvarchar(100), 
     @MembershipUserID uniqueidentifier, 
     @UniversityName nvarchar(255), 
     @Postcode nvarchar(20), 
     @BusinessName nvarchar(255), 
     @AssociateMemberID uniqueidentifier, 
     @SkillName nvarchar(255), 
     @Debits int, 
     @Gender int 
) 
AS 
BEGIN 

    SET @SkillName = [dbo].[fnGetMemberskills](@AssociateMemberID) 
    SET @Debits = [dbo].[fnGetMembersSpentCredits](@AssociateMemberID) 
    SET NOCOUNT ON; 

SELECT DISTINCT AssociateMember.ID AS ID  
     ,AssociateMember.Firstname AS FirstName   
     ,AssociateMember.Lastname AS LastName 
     ,Address.Location AS Location 
     ,Address.City AS City 
     ,BusinessProfile.BusinessName 
     ,EducationHistory.UniversityName 
     ,AssociateMember.MembershipUserID AS MembershipUserID 
     ,EmploymentHistory.JobTitle AS JobTitle 
     ,AssociateMember.MemberPhotoUrl AS MemberPhotoUrl 
     ,aspnet_Membership.Email AS Email 
     ,AssociateMemberJourneyContent.JourneyContent AS JourneyContent 
     ,([dbo].[fnGetMemberskills](AssociateMember.ID)) AS MemberSkillList 
     ,([dbo].[fnGetMembersSpentCredits](AssociateMember.ID)) AS Debits    
FROM 
    AssociateMember 
INNER JOIN 
    aspnet_Membership 
    ON AssociateMember.MembershipUserID=aspnet_Membership.UserId 
left outer join MemberAddressLink  
    ON AssociateMember.ID=MemberAddressLink.MemberID 

left outer join 
    Address 
    ON Address.ID=MemberAddressLink.AddressID 

left outer join 
    EmploymentHistory 
    ON AssociateMember.ID=EmploymentHistory.MemberID  

left outer join 
    EducationHistory 
    ON EducationHistory.MemberID=AssociateMember.ID 

left outer join 
    MemberEmploymentHistory 
    ON AssociateMember.ID=MemberEmploymentHistory.MemberID 

left outer join 
    BusinessProfile 
    ON BusinessProfile.ID=MemberEmploymentHistory.BusinessProfileID 

left outer join 
    MemberSkill 
    ON MemberSkill.MemberID=AssociateMember.ID 

left outer join 
    SkillType 
    ON SkillType.ID = MemberSkill.SkillID AND MemberSkill.MemberID=AssociateMember.ID 
left outer join 
    AssociateMemberJourneyContent 
    ON AssociateMember.ID=AssociateMemberJourneyContent.AssociateMemberID 

where 
((Address.Location)=ISNULL(@Location,Address.Location) and (MemberAddressLink.IsDefault=1) 
       OR (Address.Location like '%'+ @Location+'%')or (Address.Location is null)) and 

(AssociateMemberJourneyContent.JourneyContentTypeID=1 OR AssociateMemberJourneyContent.JourneyContentTypeID IS NULL) AND 


(((BusinessProfile.BusinessName)=ISNULL(@BusinessName,BusinessProfile.BusinessName) 
          OR (BusinessProfile.BusinessName like '%'+[email protected]+'%')or(BusinessProfile.BusinessName is null)) 
           AND 
          ((MemberEmploymentHistory.StartDate)=(SELECT MAX(StartDate) FROM MemberEmploymentHistory 
WHERE MemberEmploymentHistory.MemberID=AssociateMember.ID) OR (MemberEmploymentHistory.StartDate IS NULL))) AND 


((AssociateMember.Firstname)=ISNULL(@FirstName,AssociateMember.Firstname) 
          OR (AssociateMember.Firstname like '%'[email protected]+'%')OR (AssociateMember.Firstname IS NULL)) AND 



((Address.Postcode)=ISNULL(@Postcode,Address.Postcode) 
       OR (Address.Postcode like '%'[email protected]+'%') OR (Address.Postcode IS NULL)) AND 

(((EducationHistory.UniversityName)=ISNULL(@UniversityName,EducationHistory.UniversityName) 
       OR (EducationHistory.UniversityName like '%'[email protected]+'%') OR (EducationHistory.UniversityName IS NULL)) AND 
      ((EducationHistory.StartDate)=(SELECT MAX(StartDate) FROM EducationHistory 
WHERE EducationHistory.MemberID=AssociateMember.ID) OR (EducationHistory.StartDate IS NULL)))AND 



((AssociateMember.GenderID)=ISNULL(AssociateMember.GenderID,@Gender) 
          OR (AssociateMember.GenderID IS NULL)) AND 


((EmploymentHistory.StartDate)=(SELECT MAX(StartDate) FROM EmploymentHistory 
WHERE EmploymentHistory.MemberID=AssociateMember.ID)OR (EmploymentHistory.StartDate IS NULL) ) 
end 
+0

你能告訴我們一個你現在得到的小數據集和一個顯示你想要的小數據集嗎? – Melanie 2013-04-23 15:35:09

回答

0

好,而不是試圖做這一切在一重擊,打破它,先寫你的查詢在列,運行它。然後做下一個,運行它。等最後結合兩個查詢,運行,結合3個查詢運行等。如果在任何時候你沒有得到你所期望的,分析你在做什麼。